我正在尝试通过 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
&
最后将进程发送到后台。