私は現在、PHPでデプロイメントフレームワークを書いています。フレームワークはサーバーに接続し、SSH経由でコマンドを実行します。私はこれをより良くするためにPHPで方法を見つけようとしてかなり長い間探していました。要件は次のとおりです。テクニックは次のことができるはずです:
SSHパスワードをプログラムで入力します。パスワードなしのSSHログオンが必要な場合は、SSHキーを使用する方法があることは知っていますが、これはデプロイメントフレームワークであることを忘れないでください。一度に25台のサーバーに展開される可能性があります。フレームワークを使用するためにユーザーにSSHキーの設定を要求するのは正しくないようですが、パスワードを25回入力したいのは誰ですか?ここでは、モデルとしてCapistranoを使用しています。パスワードの入力を1回要求し、それを使用して、ユーザーに再度プロンプトを表示せずにSSH接続を確立します。パスワードをデプロイスクリプトに保存することはお勧めしません。(サイレントに)一度入力して、デプロイタスクが完了するまで使用します。
PHPスクリプトに出力を送信します。各SSHセッションからの端末出力を個別にインターセプトし、変更してから、ユーザーが確認できるように端末に送り返すことができるようにしたいと思います。このようにして、出力の各行にサーバーの名前を追加して、何が起こっているかを示すことができます。
端末への書き込み(および読み取り)アクセスを提供します。ユーザー(またはスクリプト)がSSHパスワードだけでなく他の情報を端末に入力できることが重要です。
SSHv2をサポートします。
現在、私のフレームワークは、デプロイスクリプトからのコマンドを1つの巨大な文字列に「コンパイル」し、SSHコマンドを使用してそれらを実行します。最終的な各デプロイコマンドは次のようになります。
ssh -t -t -p 12345 user@server.com 'command1; command2;'
これらのSSHコマンドはそれぞれ、PHPの組み込みpassthru
関数を介して実行されます。
<?php passthru("ssh -t -t -p 12345 user@server.com 'command1; command2;'"); ?>
私はproc_openとPHPの他のコマンド実行関数のほぼすべてを無駄に使用しようとしました-それらのどれも私が上にリストしたすべての機能を提供しません。さらに、私はいくつかの純粋なPHP SSH実装を試しましたが、これも役に立ちませんでした。ライブラリは、端末への書き込みアクセスを提供しないか、SSHv2をサポートしていません。
これに関するどんな助けも大いに感謝されるでしょう-事前に感謝します!