我想以sudo
特权在远程主机上运行脚本,有人建议我应该使用nohup
and 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"'