我有一个 shellscript,它使用 ssh 和一个密钥连接到另一台机器,因此它不需要用户名和密码。
当我从命令行运行此脚本时,它工作正常。但是当我从 php shell_exec 运行此脚本时,它不起作用。
如果我与 PHP 建立 ssh 连接并以我自己的用户身份运行脚本,它确实可以工作。
现在我的问题是:D 有没有办法只shell_exec
从 php 中运行脚本,而无需以其他用户身份通过 ssh 建立连接?
我有一个 shellscript,它使用 ssh 和一个密钥连接到另一台机器,因此它不需要用户名和密码。
当我从命令行运行此脚本时,它工作正常。但是当我从 php shell_exec 运行此脚本时,它不起作用。
如果我与 PHP 建立 ssh 连接并以我自己的用户身份运行脚本,它确实可以工作。
现在我的问题是:D 有没有办法只shell_exec
从 php 中运行脚本,而无需以其他用户身份通过 ssh 建立连接?
您是否正确指定了私钥文件?
如果您使用的是 Ubuntu 或 Debian,则 Web 服务器使用用户名www-data运行。对于其他系统,请检查用户名的 Web 服务器配置。您可以简单地测试该用户(和您的 php Web 应用程序)是否能够进行 SSH 连接。
1) 成为您的网络服务器的用户
sudo su www-data
2)尝试连接远程主机
ssh remoteUser@remoteHost
如果您在不输入密码的情况下进行连接,则肯定是另一个问题。如果您必须输入密码,则密钥文件是为不同的用户存储的,而不是为www-data 存储的。您已经将 SSH 配置为使用该密钥。对您的本地用户www-data执行相同的操作,它将起作用。
似乎 ssh 连接不适用于shell_exec
. 如果我shellscript
在它下面运行ssh2_exec
它似乎确实有效。
这有点奇怪,因为 ssh 连接是在脚本文件中使用公钥和私钥进行的。我假设这只会运行:s
允许网络服务器执行该文件,因为那里有其他命令可以按预期工作。