現在、PHPでデプロイメントフレームワークを作成しています。このフレームワークはサーバーに接続し、SSHを介してコマンドを実行します。私はこれをより良くするためにPHPで方法を見つけようとしている間、ずっと探してきました。ここに要件があります。この手法では、次のことが可能になります:PHPでSSH経由で複数のサーバーと対話する
プログラムでSSHパスワードを入力します。 SSH鍵を使用することは、パスワードなしのSSHログオンが必要なときに行く方法ですが、これはデプロイメントフレームワークです。一度に25台のサーバーに展開する可能性があります。ユーザーがフレームワークを使用するためにSSHキーを設定する必要はなく、パスワードを25回入力したいと思うのは当然でしょうか?私はここでモデルとしてCapistranoを使用しています。パスワードを一度尋ねてから、ユーザーに再度プロンプトを表示せずにSSH接続を確立するために使用します。パスワードを配布スクリプトに保存するよう提案するのではなく、一度だけ入力して配布タスクが終了するまで使用します。
出力をPHPスクリプトに送信します。私は、SSHセッションのそれぞれから独立して端末の出力を傍受し、それを修正して、それを端末に送り返して見せるようにしたいと考えています。このようにして、サーバの名前を出力の各行に付加して、何が起きているのかを示すことができます。
端末への書き込み(読み取りと同様に)アクセスを提供します。ユーザー(またはスクリプト)がSSHパスワードだけでなく端末に他の情報を入力できることが重要です。
サポートSSH v2。
現在、私のフレームワークは、展開スクリプトのコマンドを1つの巨大な文字列に「コンパイル」し、SSHコマンドを使ってそれらを実行します。これらのSSHコマンドのそれぞれがpassthru
機能に組み込みのPHPのを介して実行される
ssh -t -t -p 12345 [email protected] 'command1; command2;'
::私はほぼすべては、proc_openとを使用して試してみました
<?php passthru("ssh -t -t -p 12345 [email protected] 'command1; command2;'"); ?>
各最終deployコマンドは次のようになりますPHPの他のコマンド実行機能のうち、役に立つものはありません。これらの機能のうち、私が上に挙げたすべての機能を提供するものはありません。さらに、純粋なPHP SSH実装を試してみました。ライブラリは端末への書き込みアクセスを提供しないか、SSH v2をサポートしません。
これに関するお手伝いがあれば、よろしくお願いいたします。
うーん、悪い提案ではありません。私は前にphpseclibを使用しようとしましたが、それはかなり良いと判明しましたが、書き込みアクセスはありませんでした。これは、書き込みアクセス権を持つv1をサポートしますが、v2はサポートしません。あなたが書いた最初のコマンドが 'パススルー 'を使って実行されているため、実際には書き込みアクセスであるとは考えていません。私が本当に探しているのは、stdin/stdoutへのストリームです。 – Cameron
私は最終的に私が必要とするものに対してphpseclibを動作させることができました。あなたがSSH2を使用している場合、書き込みアクセスは提供しませんが、サブバージョンチェックアウトのようなものに対してユーザーがキーを設定するとは思えません。正しい方向に私を指してくれてありがとう! – Cameron