Web ページ経由でリモート Linux マシンに接続し、コマンドを送信して、その出力を Web ページ自体に表示しようとしています。
これは私がこれまで行ってきたことです(すべてのステップの後、コードが到達できる場所を追跡できるように、テキストをエコーします)
Web ページから実行した場合、コードは「2. phpseclib が含まれています\n」まで取得します
このコードを端末で実行すると、最後に到達します!
<html>
<body>
TEST <br/>
<?php
echo "1. start\n";
define('NET_SSH2_LOGGING', 2);
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib1.0.0');
include('Net/SSH2.php');
echo "2. phpseclib included\n";
$ssh = new Net_SSH2('HOSTNAME');
echo "3. after Net_SSH2\n";
if (!$ssh->login("USERNAME", "PASSWORD")) {
echo "4. login failed";
exit('Login Failed');
} else {
echo "4. login gained\n";
}
echo "5. after login\n";
if (!($stream = $ssh->exec("ls"))) {
echo "fail: unable to execute command\n";
} else {
echo $stream;
}
if (!($stream = $ssh->exec("> foo.txt"))) {
echo "fail: unable to execute command\n";
} else {
echo $stream;
}
echo $ssh->getLog();
echo "6. end of code\n";
?>
</body>
</html>
リモートマシンに接続した後、メッセージの表示を停止したように見えますか?
これが実際に可能かどうか疑問に思い始めていますか?それともセキュリティ上の問題によるものですか?
ここから SSH2 ライブラリをインストールしました: http://phpseclib.sourceforge.net/
また、同じコードを使用しましたが、include を使用する代わりに、require を使用しました。
<html>
<body>
TEST <br/>
<?php
echo "1. start\n";
define('NET_SSH2_LOGGING', 2);
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib1.0.0');
require('Net/SSH2.php');
echo "2. phpseclib included\n";
$ssh = new Net_SSH2('HOST');
echo "3. after Net_SSH2\n";
if (!$ssh->login("USERNAME", "PASSWORD")) {
echo "4. login failed";
exit('Login Failed');
} else {
echo "4. login gained\n";
}
echo "5. after login\n";
if (!($stream = $ssh->exec("ls"))) {
echo "fail: unable to execute command\n";
} else {
echo $stream;
}
if (!($stream = $ssh->exec("> foo.txt"))) {
echo "fail: unable to execute command\n";
} else {
echo $stream;
}
echo $ssh->getLog();
echo "6. end of code\n";
?>
</body>
</html>
解決済み: PEAR 経由でライブラリをインストールする