【问题标题】:ssh connection using php使用 php 的 ssh 连接
【发布时间】:2014-08-09 10:35:05
【问题描述】:

在我的 VPN 上,我有一个远程服务器和一个远程路由器(它使用 API 运行 RouterOS 并支持 ssh 连接)。我想要的是编写一个 php 脚本并将其部署在服务器上,这样它将使用 IP 地址和登录凭据连接到远程路由器,然后运行一些命令。

我在互联网上读到有一个解决方案是 libssh2.php 库,但我不知道如何安装/使用甚至测试它是否在服务器上工作。服务器正在运行 CentOS。

提前谢谢你!!!

【问题讨论】:

    标签: php ssh libssh2


    【解决方案1】:

    我认为您最好使用phpseclib, a pure PHP SSH implementation。它比 libssh2 有很多优点:

    http://phpseclib.sourceforge.net/ssh/compare.html

    这是一个例子:

    <?php
    include('Net/SSH2.php');
    
    $ssh = new Net_SSH2('www.domain.tld');
    if (!$ssh->login('username', 'password')) {
        exit('Login Failed');
    }
    
    echo $ssh->exec('pwd');
    echo $ssh->exec('ls -la');
    ?>
    

    【讨论】:

      【解决方案2】:

      我之前这样做过,只是直接使用 SSH 命令。例如:

      $sshCmd = "ssh user@1.2.3.45 \"ls -la ~\"";
      exec($sshCmd, $output, $errorCode);
      echo "Error code: $errorCode\n";
      echo "Output: " . implode("\n", $output);
      

      如果您有更复杂的脚本要运行,您可以将 then 放入 .sh 脚本中,然后通过 bash 运行:

      $sshCmd = "ssh user@1.2.3.45 'bash -s' < \"/path/to/script.sh\"";
      exec($sshCmd, $output, $errorCode);
      echo "Error code: $errorCode\n";
      echo "Output: " . implode("\n", $output);
      

      【讨论】:

      • 嗯,好的,但是我怎么看输出???我按照你的建议写了,服务器没有返回错误。但是我怎么知道命令被执行了???有没有办法输出命令返回的内容???
      • @user2462749, exec 可以选择返回命令输出和错误代码。我已经更新了我的示例以显示这一点。
      • 所以我写了 exec($sshCmd, $shhOut, $shhErr) 或 die("Failed to connect"); ___ 它打印“连接失败”。所以我的猜测是 exec 不工作。任何想法可能是什么问题???
      • 不行,你需要通过 SSH 一次性发送所有命令。在你的情况下,它会是这样的:ssh admin@192.168.252.34 "/system backup name=phpRemoteBackup"。首先,您可以在您的 shell 中尝试此操作,以仔细检查它是否确实有效。也尝试不使用die() 语句。相反,请按照我的答案中的示例代码检查 ssh 的输出和错误代码。
      • 我在我的 shell 上尝试了 ssh admin@192.168.252.34 /system clock print 但没有成功。它要求我输入密码。我怎么把密码和用户名一起输入???
      猜你喜欢
      • 2012-11-08
      • 2018-08-16
      • 1970-01-01
      • 2016-03-28
      • 2019-08-31
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多