【问题标题】:PHP shell_exec ssh connectionPHP shell_exec ssh 连接
【发布时间】:2011-12-06 09:14:12
【问题描述】:

我知道这个问题以前曾以许多不同的方式被问过,但我仍然在为为什么我不能让它工作而摸不着头脑。

首先,我设置了两台 SLES 服务器,它们是服务器 A 和服务器 B,它们都在一个小型专用网络上运行,只有专门的团队才能访问。

服务器 A 被配置为运行 Apache、PHP、MYSQL 和 ssh 的 Web 服务器,所有这些都运行正常。

服务器 B 用于运行安装并激活了 ssh 的琐碎任务。

我在服务器 A 上创建了我的 rsa 密钥并将其安装在服务器 B 上,当在命令行运行时,我会立即登录,而无需输入密码。我已经为服务器 A 上的 root 和nobody 帐户重复了这个过程。

我已将此 PHP 页面添加到服务器 A,如下所示:

<?php
shell_exec('ssh root@192.162.0.5 ./StartTest.sh');

header("Location: archive.php?page=home"); 
?>

但是当我运行它时,它不会创建我的文件夹。如果我从命令行运行它,它适用于两者(我认为两者都适用,我不记得我是否确实为cli上的nobody帐户尝试过这个)root和nobody帐户。我什至将nobody 帐户添加到root 组,但仍然没有乐趣。

我在这里错过了什么吗?我想做的就是通过 php & ssh 从服务器 A 连接到服务器 B 以执行一个命令并重定向到网站上的另一个页面。

由于我的扑热息痛库存不足,我们将不胜感激任何帮助。

【问题讨论】:

  • 也许这会有所帮助:shell_exec 可能会使用不同于您的 shell。并在不同的用户下。找出它使用哪个 shell 和哪个用户,然后将您的 .ssh 配置复制到那里 - 或设置适当的环境变量,无论导致问题。您还可以使用 ssh 输出调试内容,检查开关。
  • 还可以考虑使用 PHP 内置的 ssh2_connectssh2_auth_pubkey_filessh2_exec 来完成这项任务。

标签: php linux ssh shell-exec


【解决方案1】:

George Cummins 所说的内置 SSH 支持是不存在的。它是默认情况下不包含的 PHP 扩展。它必须单独编译,并且众所周知难以设置/使用。我的建议是使用phpseclib, a pure PHP SSH implementation:

<?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');
?>

【讨论】:

  • 感谢 nigol,此解决方案设置起来毫不费力。
【解决方案2】:

你说“我已经添加了一个 PHP 页面”,所以我假设你是通过你的网络服务器执行这个脚本,而不是作为一个独立的脚本。

因此,脚本可能不在您期望的目录中运行。您应该使用绝对(而不是相对)路径来确保脚本找到 ssh 二进制文件和您的脚本:

shell_exec('/path/to/ssh root@192.162.0.5 /home/yourdirectory/scripts/StartTest.sh');

您还需要确认网络服务器用户有权执行 ssh 和 StartTest.sh 脚本。

【讨论】:

  • 感谢您的及时回复。是的,抱歉这个页面是从我的网络服务器执行的。明天我可以再次访问服务器时,我会尝试您的建议。
  • 我选择了 Nigols 解决方案,但我感谢您抽出宝贵的时间来查看我的问题并为我的武器库增加一点知识。
  • shell_exec 也可以通过在命令末尾附加2&gt;&amp;1 来捕获错误输出(对调试很有用)。
【解决方案3】:

我知道我在这个答案上为时已晚,但也许可以帮助某人:

要使用shell_execssh,您需要将作为参数添加到ssh 这些

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet

因此该命令不会尝试创建 .ssh 文件夹,并且您有一个清晰的输出,没有 ssh 的日志

【讨论】:

  • 与其关闭检查主机密钥,不如将主机密钥添加到已知主机文件中:ssh-keyscan -H remote_host &gt;&gt; ~/.ssh/known_hosts
猜你喜欢
  • 2013-04-11
  • 2019-08-31
  • 1970-01-01
  • 2012-11-08
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
  • 2015-01-17
相关资源
最近更新 更多