PHP shell_exec 使用 ssh 运行 shell 脚本 | 珊瑚贝

PHP shell_exec running a shellscript with ssh


我有一个 shellscript,它通过 ssh 和一个密钥连接到另一台机器,所以它不需要用户名和密码。

当我从命令行运行这个脚本时它工作正常.. 但是当我从 php shell_exec 运行这个脚本时它不起作用。

如果我与 PHP 建立 ssh 连接并以我自己的用户身份运行脚本,它确实可以工作。

现在我的问题:D
有没有办法只在 shell_exec 中从 php 中运行脚本,而无需通过 ssh 以其他用户身份建立连接?

  • 那是对你的场景的一个相当糟糕的描述。无论如何,您确定命令行和 PHP 使用相同的用户,即您是从命令行而不是从网络服务器运行 PHP?
  • 这听起来更像是一个系统管理员问题。如果运行 PHP 的用户有权执行相关程序,则有可能。否则,这是不可能的。
  • Php 作为 www-data 运行,当我在 php 下连接到 ssh 时,我使用自己的用户帐户登录,所以肯定不是同一个用户。出错的地方是 shellscript… ssh -n -i $KEYFILE $USER@$HOST “bash ./jpg2xml.sh /tmp/$tmpfile | ./ocr” 由 php 从 shellscript 运行.它确实运行脚本,只有这部分不起作用!


您是否正确指定了私钥文件?

  • Arrr,您说得对,先生..如果我将所有者更改为 www-data 它可以工作..它对于 apache 不可读。


似乎 ssh 连接不适用于 shell_exec。如果我在 ssh2_exec 下运行 shellscript,它似乎确实有效。

这有点奇怪,因为 ssh 连接是在脚本文件中使用公钥和私钥建立的。我假设这只会运行 :s

允许网络服务器执行该文件,因为其中还有其他命令可以按预期工作。


如果您使用的是 Ubuntu 或 Debian,则 Web 服务器使用用户名 www-data 运行。对于其他系统,请检查用户名的 Web 服务器配置。您可以简单地测试该用户(和您的 php Web 应用程序)是否能够进行 SSH 连接。

1) 成为您的网络服务器的用户

1
sudo su wwwdata

2) 尝试连接远程主机

1
ssh remoteUser@remoteHost

如果您在不输入密码的情况下就可以连接,那肯定是另一个问题。如果您必须输入密码,则密钥文件是为不同的用户存储的,而不是为 www-data 存储的。您已经将 SSH 配置为使用该密钥。对您的本地用户 www-data 执行相同的操作,它会起作用。

  • 但是我在 shellscript 中连接为不同的用户然后 www-data 所以理论上它不应该有所作为吧?我执行以下操作.. ssh -o StrictHostKeyChecking=no -n -i $KEYFILE $USER@$HOST


来源:https://www.codenong.com/4123099/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9886.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?