【问题标题】:Execute a shell command through ssh using PHP使用 PHP 通过 ssh 执行 shell 命令
【发布时间】:2013-08-24 18:45:31
【问题描述】:

我正在尝试执行一个简单的 shell 命令并在网页上打印结果,但结果为空。下面是我找到的一段代码,但到目前为止没有任何效果。

 <?php
            $server = "myserver";
            $username = "myadmin";
            $command = "ps";
            $str = "ssh " .$username. "@" .$server. " " .$command;

            exec($str, $output);

            echo '<pre>';
            print_r($output);
            echo '</pre>';
    ?>

【问题讨论】:

  • ssh 命令自己工作了吗,意思是你先在命令行下试试?
  • exec($str, $output, $return);。也检查错误代码,var_dump(array($output, $return));
  • 还有echo $str;获取字符串并尝试在shell中手动运行。
  • @bjackfly 是的,该命令本身可以工作,但在脚本中使用时不能
  • @Jigar 没有错误代码,只是没有返回任何内容。

标签: php shell ssh


【解决方案1】:

使用更面向对象的解决方案,您可以安装phpseclib 版本2:

composer require phpseclib/phpseclib

然后创建你的 ssh 对象:

$ssh = new SSH2('yourhost');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

在这个例子中,我使用了通过 usernamepassword 的连接,但您也可以通过 ssh-keys 进行连接。 如果连接成功,您可以执行 exec 方法在服务器上执行您的命令。

【讨论】:

    【解决方案2】:

    您在端口号之前缺少-p 选项:

    $str = "ssh -p $port $username@$server $command";
    

    【讨论】:

      【解决方案3】:

      试试phpseclib,就可以了。

      <?php
          include('Net/SSH2.php');
      
          $server = "myserver";
          $username = "myadmin";
          $password = "mypass";
          $command = "ps";
      
          $ssh = new Net_SSH2($server);
          if (!$ssh->login($username, $password)) {
              exit('Login Failed');
          }
      
          echo $ssh->exec($command);
      ?>
      

      【讨论】:

      • 我无法在这些机器上安装任何软件包。有没有其他办法解决这个问题?
      • 好吧,如果你可以在你的机器上创建 PHP 源文件,你可以安装 phpseclib,因为那也只是一堆 PHP 文件。
      • 是否可以使用 SSH 密钥登录而不是使用硬编码密码?
      • 很容易。查看他们的examples
      • 也可以完美地使用 SSH 密钥。
      最近更新 更多