在bg中执行远程进程时ssh不返回

在bg中执行远程进程时ssh不返回

我正在尝试通过 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

&最后将进程发送到后台。

相关内容