这是一个后续的问题,你如何使用ssh在一个shell脚本?的问题。如果我想在远程机器上执行在后台运行的命令,如何返回ssh命令?当我试图在命令末尾只包含&号时,它就挂起了。命令的确切形式如下所示:

ssh user@target "cd /some/directory; program-to-execute &"

什么好主意吗?需要注意的一件事是,登录到目标机器总是产生一个文本横幅,我设置了SSH密钥,所以不需要密码。


当前回答

你可以这样做……

sudo /home/script.sh -opt1 > /tmp/script.out &

其他回答

对我来说,使用tmux new -d <shell cmd>语法进行远程tmux会话似乎非常方便:

ssh someone@elsewhere 'tmux new -d sleep 600'

这将在其他主机上启动新会话,本地机器上的ssh命令将几乎立即返回shell。然后您可以通过ssh连接到远程主机,并将tmux附加到该会话。注意,没有本地tmux运行,只有远程运行!

另外,如果你想让你的会话在任务完成后继续,只需在命令后添加一个shell启动器,但不要忘记用引号括起来:

ssh someone@elsewhere 'tmux new -d "~/myscript.sh; bash"'

我认为这是你需要的: 首先,您需要在您的机器上安装sshpass。 然后你可以编写自己的脚本:

while read pass port user ip; do
sshpass -p$pass ssh -p $port $user@$ip <<ENDSSH1
    COMMAND 1
    .
    .
    .
    COMMAND n
ENDSSH1
done <<____HERE
    PASS    PORT    USER    IP
      .      .       .       .
      .      .       .       .
      .      .       .       .
    PASS    PORT    USER    IP    
____HERE

我只是想展示一个你可以剪切和粘贴的工作示例:

ssh REMOTE "sh -c \"(nohup sleep 30; touch nohup-exit) > /dev/null &\""

最快和最简单的方法是使用'at'命令:

ssh user@target "at now -f /home/foo.sh"
YOUR-COMMAND &> YOUR-LOG.log &    

这应该运行该命令并分配一个进程id,您可以简单地跟踪-f YOUR-LOG.log以查看发生时写入该进程的结果。您可以在任何时候注销,这个过程将继续进行