SSH2通过网页(html和php)连接到远程机器


SSH2 to a remote machine via a webpage (html and php)

我正试图通过网页连接到远程linux机器,提交命令并在网页上查看其输出。

这就是我到目前为止所做的(在每一步之后,我都会回显一个文本,这样我就可以跟进代码可以到达的地方)

代码达到"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 安装库

这一行是的问题

set_include_path(get_include_path()。get_include_path()。'/phpseclib');

这里有两个问题,评论中提到的第一个问题是,您试图从"/your/include/path/your/ininclude/path/phpseclib"而不是"/your/include/path/phpseclib"加载内容

如果您在include路径上安装了phpseclib,那么只需删除其中一个get_include_path,就可以继续编写代码了。同时阅读评论。

我敢打赌,如果您将include更改为require,它就不会像现在这样。

我认为set_include_path(get_include_path() . get_include_path().'/phpseclib');也是你的问题。

试试这个:

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib1.0.0');
include('Net/SSH2.php');