2010-11-08 44 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服務器允許執行該文件,如在那裏還有其他的指揮員按預期工作。