![在bg中执行远程进程时ssh不返回](https://linux22.com/image/96855/%E5%9C%A8bg%E4%B8%AD%E6%89%A7%E8%A1%8C%E8%BF%9C%E7%A8%8B%E8%BF%9B%E7%A8%8B%E6%97%B6ssh%E4%B8%8D%E8%BF%94%E5%9B%9E.png)
我正在尝试通过 ssh 远程执行命令,从本地计算机打开远程服务器上的隧道。我也在使用 sshpass。
sshpass -fpw_file.txt ssh [email protected] 'bash /home/username/do_stuff.sh &'
这个 do_stuff.sh 仅包含一行:
ssh -f -N -L 8888:hostname:9999 user@host &
但呼叫(第一个命令)没有返回。如果我将 & 放在单引号之外,它会生成一个不会被杀死的进程。虽然这是一个非常小的内存泄漏,但最好知道是否有一种方法可以干净地做到这一点。
谢谢!
答案1
将 I/O 流重定向至 null。具有开放描述符的 BG 进程可能会导致 SSH 无法关闭。
sshpass -fpw_file.txt ssh [email protected] 'bash /home/username/do_stuff.sh &> /dev/null < /dev/null &'
解释
&> /dev/null
获取 stdout 和 stderr 并将其重定向为 null
< /dev/null
获取 stdin 并将其重定向到 null
&
最后将进程发送到后台。