2010-11-08 147 views
2

我有一个shell脚本,通过ssh和一个键连接到另一台机器,所以它不需要用户名和密码。PHP shell_exec用ssh运行shellscript

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

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

现在对于我的问题:D 有没有一种方法可以通过php运行shell_exec中的脚本,而不用通过ssh作为不同用户的连接?

+1

这是一个很糟糕的描述你的情况。无论如何,你确定命令行和PHP使用同一个用户,即你是从命令行运行PHP而不是从web服务器运行? – AndreKR 2010-11-08 10:48:57

+0

这听起来更像是一个系统管理员问题。如果PHP下运行的用户有权执行相关程序,则可以。否则,这是不可能的。 – 2010-11-08 10:56:13

+0

PHP运行www数据,当我连接到PHP下的SSH我登录在我自己的用户帐户,所以definitly不是同一个用户。它出错的地方是在shell脚本中...... ssh -n -i $ KEYFILE $ USER @ $ HOST“bash ./jpg2xml.sh/tmp/$ tmpfile | ./ocr”这是由PHP通过shellcript运行的。它确实运行脚本,只有这个不工作的部分! – Chris 2010-11-08 11:11:42

回答

1

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

+0

Arrr您是对的好先生..如果我将所有者更改为www-data它工作..它是对于Apache来说不可读。 – Chris 2010-11-10 07:20:57

0

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

1)成为你的Web服务器

sudo su www-data 

2的用户)尝试连接远程主机

ssh [email protected] 

如果您将得到连接,而无需输入密码,就必须有一个不同的问题。如果您必须输入密码,则密钥文件将存储给其他用户 - 不适用于www-data。您已经配置了SSH以使用密钥。对你的本地用户www-data做同样的事情,它会起作用。

+0

但我连接在shellcript中作为一个不同的用户然后WWW数据,所以理论上它不应该有所作为吧? 我做了以下事情.. ssh -o StrictHostKeyChecking = no -n -i $ KEYFILE $ USER @ $ HOST – Chris 2010-11-09 07:21:30

0

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

的SSH连接与公钥和私钥的脚本文件所做的这是一个有些奇怪。我会以为这会运行:■

的web服务器允许执行该文件,如在那里还有其他的指挥员按预期工作。