PHPで別のサーバーでCLIコマンドを実行しようとしています。他のサーバーでコマンドを実行するには、Linux
ssh
を使用していますコマンド。 PHPでCLIコマンドを実行するために、
exec()
を使用しています
。
これは動作します...
$output = exec('cut -d: -f1 /etc/passwd'); //works!
これは、あるサーバーのコマンドラインから別のサーバーに機能します...
ssh my.otherserver.com "date"
しかし、PHPでこれを行おうとするとうまくいきません...
$output = exec('ssh my.otherserver.com "date"'); //does not work!
私がやろうとしていることは可能ですか?どうすればいいですか?前もって感謝します。
回答 3 件
sshでサーバーに接続するには、
ssh2_exec
を使用する必要があります php関数。phpseclibを使用することをお勧めします。これはPHP SSH実装のラッパーです
必要とする:
sudo apt install php-ssh2
この例は
ls -ltrapR
の出力を受け取ります リモートphpサーバーから。#!/usr/bin/php <?php $con=ssh2_connect('223.245.xx.xx', 22); ssh2_auth_password($con, 'root', 'bybyDRRxxxx'); $shell=ssh2_shell($con, 'xterm'); $stream = ssh2_exec($con, 'ls -ltrapR'); stream_set_blocking($stream, true); $out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO); echo stream_get_contents($out);
基本認証を使用しているだけなので注意してください(ファイントラストssl、VPNを使用する方が良い)。 さらに、暗号化キーなどを使用してセキュリティで保護できます。
関連記事
- アイドル状態のLinuxサーバーでこれほど多くのメモリを使用しているのは何ですか? 「htop」と「psaux」の出力の比較
- AppleScriptの「doshellscript」を介して一部のシェルコマンドを使用すると出力が空になります
- javascriptとHTMLを使用してJSONサーバーからのコメントを表示するにはどうすればよいですか?
- 外部キーを介して接続された別のモデルのフィールドを使用してDjangoフィルターデータ
- svgを使用して別の円の内側に円弧を描く方法
- where句SQLServerでビット列を使用する
- ParallelForEachループを使用してファイルをSFTPサーバーにアップロードし、パフォーマンスを向上させる方法
- 結合せずに1つのテーブルを使用して別のテーブルをフィルタリングする
- 角度を使用してサーバーにPOSTリクエストを行う
- テレボットを使用してサーバーからファイルを送信する方法は?
ssh2_connectまたはphpseclib
ssh2_connectまたはphpseclibを使用できます。 EC2インスタンスでは、ssh2_connectのパッケージをインストールする必要がありました(例:yum install php56-pecl-ssh2-0.12-5.15.amzn1.x86_64)。これはデフォルトではなかったためです。注:これは、bashスクリプトでも実行できます。
参考文献:
http://phpseclib.sourceforge.net/
http://php.net/manual/en/function.ssh2-connect.php