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

时间:2015-12-10 16:04:56

标签: php linux ssh phpseclib ssh2-exec

我正在尝试通过网页连接到远程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/

另外,我使用了相同的代码但不使用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安装库

2 个答案:

答案 0 :(得分:1)

这一行是问题

set_include_path(get_include_path()。get_include_path()。&#39; / phpseclib&#39;);

这里有两个问题,评论中提到的第一个问题是你试图从&#34; / your / include / path / your / include / path / phpseclib&#34;中加载东西。而不是&#34; / your / include / path / phpseclib&#34;

如果您已在include路径中安装了phpseclib,则应该删除其中一个get_include_path并继续使用您的代码。还要阅读评论。

答案 1 :(得分:1)

我敢打赌,如果您将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');