我的情况类似于PHP shell_exec 使用 ssh 运行 shellscript,但不一样。
情况:我在两台服务器之间交换了 ssh 密钥,切换到www-data
用户并通过 SSH 连接到第二台服务器,无需密码。
测试 1:ssh user@10.8.0.6 Documents/run.sh list 在 shell 中执行时工作正常
测试 2:将简单的 PHP Exec 放入 PHP 文件中效果很好。它返回一个数组并且Retval为0
测试 3:将 exec 放入“大”PHP 脚本中并调用它会导致 Retval 255(致命错误?!?!?)
所以目前我真的不明白为什么它不起作用。我试图找出有关 retval 255 的更多详细信息,但没有走得太远。
PHP5 与 PHP5 cli 之间的差异一定存在于某个地方。但在我不得不使用 OpenVPN 之前,它通过正常的 Apache 调用也可以正常工作。
问题诊断的第一级shell_exec
是尝试通过生成添加 2>&1 的相同命令来获取更多信息错误,例如在您的情况下
$retval = shell_exec("/path/to/ssh ... 2>&1");
Run Code Online (Sandbox Code Playgroud)
并检查$retval
.
“主机密钥验证失败”意味着~/.ssh/known_hosts
运行 Apache 的用户包含不同的密钥。签入文件中的主机名和 IP 密钥;在紧要关头,删除两者,以用户身份登录www-data
并通过手动连接恢复密钥。
如果使用主机名连接,也有可能由于 DHCP 或不同的 VPN 隧道启动而导致 IP 发生变化,而这不是您要查找的主机。
对于 SSH,可以使用-vvv
非常冗长的选项来执行它,然后解析数千字节的输出,搜索文件的源known_hosts
。它对于诊断命令也很有用,shell_exec
例如
$ret = shell_exec('set');
Run Code Online (Sandbox Code Playgroud)
查看HOME
变量的值。
归档时间: |
|
查看次数: |
5442 次 |
最近记录: |