PHP-运行远程SSH脚本并将结果打印在网页中

时间:2014-12-13 17:20:51

标签: php html forms ssh

首先,PHP远不是我的强项,但我决心要学习。我可能没有为第一个PHP项目分配最简单的任务,所以在我尝试解释时请耐心等待。我想在一个简单的表单中输入一个服务器名称,点击提交,然后在下面发生以下内容:

  1. 复制脚本
  2. 执行脚本
  3. 返回结果
  4. 不是在一个块中解决所有问题,而是(对我而言)将其分解并从小开始是有道理的:

    <?php
    
    $conn = ssh2_connect('10.x.x.x', 22);
    ssh2_auth_password($conn, 'user', 'password');
    
    ssh2_scp_send($conn, '/path/to/script', '/path/to/script', 0700);
    
    $stream = ssh2_exec($conn, '/path/to/script');
    stream_set_blocking($stream, true);
    $stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
    echo stream_get_contents($stream_out);
    
    ?>
    
    # php –f name-of-script.php
    

    这在命令行中运行良好,并返回了预期的响应。

    我想扩展它并在浏览器中具有相同的功能,因此我创建了一个简单的表单,如下所示:

    <form action="name-of-script.php" method="POST">
    Server Name: <input type="text" name="node" size="20">
    <input type="submit" value="Submit">
    </form> 
    

    然后稍微修改了我的代码:

    <?php
    
    $node = $_POST["node"];
    
    $conn = ssh2_connect($node, 22);
    ssh2_auth_password($conn, 'user', 'password');
    
    ssh2_scp_send($conn, '/path/to/script', '/path/to/script', 0700);
    
    $stream = ssh2_exec($conn, '/path/to/script');
    stream_set_blocking($stream, true);
    $stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
    echo stream_get_contents($stream_out);
    
    ?>
    

    我是否因为期望所有SSH2函数与浏览器中的命令行产生相同的结果而犯了一个根本性的错误?输入服务器名称并单击“提交”后,我现在看到的只是一个空白页。

1 个答案:

答案 0 :(得分:0)

我这是一个完整的男生错误!我处理的文件是后缀.html而不是.php!一旦我重命名了文件,一切都很顺利。

工作代码:

$conn = ssh2_connect('10.x.x.x', 22);
ssh2_auth_password($conn, 'user', 'password');

ssh2_scp_send($conn, '/path/to/script', '/path/to/script', 0700);

$stream = ssh2_exec($conn, '/path/to/script');
stream_set_blocking($stream, true);
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
echo stream_get_contents($stream_out);