2016-01-20 104 views
1

我需要通過SSH和sudo遠程啓動的進程(此處爲sleep 20)的進程ID。獲取通過ssh使用sudo啓動的進程的PID

date被插入來說明SSH連接的持續時間。沒有連接,當然,我的遠程機器上也沒有進程。

$ date; ssh pc1 "sleep 20 & echo \$!"; date       # works 
Mi 20. Jan 16:18:29 CET 2016 
11540 
Mi 20. Jan 16:18:50 CET 2016 
$ date; ssh pc1 "echo password | sudo -S sleep 20"; date    # works 
Mi 20. Jan 16:20:44 CET 2016 
[sudo] password for lab: Mi 20. Jan 16:21:04 CET 2016 
$ date; ssh pc1 "echo password | sudo -S sleep 20 & echo \$!"; date # does not 
Mi 20. Jan 16:21:55 CET 2016 
11916 
Mi 20. Jan 16:21:56 CET 2016 

在第二臺機器最後,完整的命令工作正常:

$ date; ssh pc2 "echo password | sudo -S sleep 20 & echo \$!"; date 
Mi 20. Jan 16:23:40 CET 2016 
6035 
[sudo] password for lab: Mi 20. Jan 16:24:01 CET 2016 

任何建議,爲什麼會出現兩個機器的這種不同的行爲?

信息:我知道清除密碼的風險,但它是隔離測試網絡中的共享帳戶。

+0

你是什麼意思的「不工作」? –

+1

我正在投票結束這個問題,因爲它更適合[Unix&Linux](http://unix.stackexchange.com/)Stack Exchange。 –

+0

這意味着我的進程沒有在遠程機器上運行。要麼因關閉連接而死亡,要麼反之亦然。 – Chickenmarkus

回答

0

看起來不完整流程依賴的問題。再過一些毫秒,連接(和過程)就會一直保持建立。

$ date; ssh pc1 "echo password | sudo -S sleep 20 & echo \$! && sleep 0.01"; date 
Do 21. Jan 14:50:39 CET 2016 
[sudo] password for lab: 6841 
Do 21. Jan 14:51:00 CET 2016 
0

是這樣的嗎?

$ remote_pid=$(ssh [email protected] 'sleep 20 > /dev/null 2>&1 & echo $!') 
$ echo $remote_pid 
13878 

或...

$ remote_pid=$(ssh [email protected] 'echo secret | sudo -S sleep 20 > /tmp/log 2>&1 & echo $!') 
+0

輸入用戶密碼執行sudo在哪裏? – Chickenmarkus

+0

請參閱上面的更新版本.... – mauro

+0

除輸出管道到文件外,它與我的完全相同,也不起作用。在日誌文件中,只有提示輸入sudo密碼(來自stderr)。 – Chickenmarkus