通过ssh获取以sudo启动的进程的PID

时间:2016-01-20 15:38:08

标签: linux bash shell ssh sudo

我需要通过SSH和sleep 20远程启动流程的进程ID(此处sudo)。

插入

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

有关两台机器存在这种不同行为的建议吗?

信息:我知道明确密码的风险,但它是隔离测试网络中的共享帐户。

2 个答案:

答案 0 :(得分:0)

这样的东西?

$ remote_pid=$(ssh mauro@planck 'sleep 20 > /dev/null 2>&1 & echo $!')
$ echo $remote_pid
13878

...或

$ remote_pid=$(ssh mauro@planck 'echo secret | sudo -S sleep 20 > /tmp/log 2>&1  & echo $!')

答案 1 :(得分: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