我正在尝试通过网页连接到远程 linux 机器,提交命令并在网页本身上查看其输出。
这就是我到目前为止所做的(在每一步之后我都会回显一个文本,这样我就可以跟进代码可以到达的位置)
如果从网页中执行,代码会达到“2. phpseclib included\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/
此外,我使用了相同的代码,但没有使用包含,而是使用了 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 安装库