如何在后台运行 ssh -t user@remote 'sudo nohup bash -c "command"'

如何在后台运行 ssh -t user@remote 'sudo nohup bash -c "command"'

我想以sudo特权在远程主机上运行脚本,有人建议我应该使用nohupand ssh -t,如以下命令:

该脚本ls; sleep 10; echo finish是在这里精心设计的,类似于我想做的事情。

ssh -t esolve@remote_host \
'sudo nohup bash -c "ls;sleep 100;echo finish" < /dev/null 2>&1 >> ssh.log' 

我想在本地主机上在后台运行此脚本,因为在我的脚本中,在此命令之后还有一些其他命令,例如

my script.sh:

ssh -t esolve@remote_host \
'sudo nohup bash -c "ls;sleep 100;echo finish" < /dev/null 2>&1 >> ssh.log' 
... some other commands

以下两个命令不起作用

ssh -t esolve@remote_host \
'sudo nohup bash -c "ls;sleep 100;echo finish" < /dev/null 2>&1 >> ssh.log' &

ssh -t esolve@remote_host \
'sudo nohup bash -c "ls;sleep 100;echo finish" < /dev/null 2>&1 >> ssh.log &' 

为什么?

如何使该命令在本地主机后台运行?此外,我不需要sudo在远程主机上输入密码。

答案1

添加-b标志sudo,如果需要,会提示输入密码,然后转到后台。 (重定向也需要在 bash 中完成)(需要大括号才能将重定向应用于所有内容)

ssh -t esolve@remote_host 'sudo -b nohup bash -c "{ ls;sleep 100;echo finish; } < /dev/null 2>&1 >> ssh.log"'

您可能还想尝试屏幕...

ssh -t esolve@remote_host 'sudo -b screen -m -d bash -c "{ ls;sleep 100;echo finish; } < /dev/null 2>&1 >> ssh.log"'

相关内容