2016-01-20 122 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