2011-12-13 462 views
0

有沒有一種簡單的方法可以在不使用ssh2_*的情況下在PHP遠程機器的後臺執行SSH命令? PHP腳本由用戶從bash執行(不涉及Apache),所以它不是權利問題。我試着這樣做:如何使用PHP exec()在後臺執行遠程SSH命令?

exec("ssh -f -o UnknownHostsFile=/dev/null -o StrictHostKeyChecking=no -i {$keyFile} {$user}@{$ip} {$remoteCommand} 2>&1 >/dev/null </dev/null"); 

例如:

exec("ssh -f -o UnknownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /home/data/id_rsa [email protected] '/home/user/script.sh ; exit' 2>&1 >/dev/null </dev/null"); 

所有PHP變量已經逃脫了escapeshellarg()$remoteCommand是遠程機器上的bash腳本,睡了幾分鐘,然後開始執行一些命令。

我的問題是,如果我從bash執行該SSH命令,它會立即控制回bash。如果我使用exec()從php執行它,它會等待直到執行遠程命令。我試過在/home/user/script.sh後面添加2>&1 >/dev/null </dev/null,但是執行仍然沒有將控制權返回給PHP腳本。

+0

我不明白bash的問題。你不想讓它立即控制回bash嗎?你不是想在後臺執行嗎? – davidethell

+0

如果你不介意闡述,爲什麼你不想使用ssh2_ *? – favoretti

+0

@davidethell是的,我這樣做,但似乎並不奏效。 –

回答

1

我想你是缺少一個&在您的命令的結尾發送執行到後臺。

+0

是的,我錯過了,但它仍然沒有幫助。 –