我想运行一个需要 SSH 隧道才能运行的命令(重复打开 TCP 连接)。隧道存在后,需要再次关闭隧道。我遇到的问题是:
我可以立即在后台运行该命令,但是我没有可靠的方法来确保隧道已建立:
#!/bin/bash set -e ssh -N -L lport:server:port host & trap "kill $!" EXIT sleep 1 my program that connects to localhost:lport
打开隧道的时间经常超过 1 秒。我也可以设置更多的时间,但用户体验就不是很好,而且仍然不可靠。
我可以在打开连接时让 SSH 自行运行在后台,但是之后我找不到可靠的方法来终止它,因为我不知道后台 SSH 进程的 PID:
#!/bin/bash set -e ssh -f -N -L lport:server:port host # I'd set up a trap ??? EXIT, but for what? my program that connects to localhost:lport
有没有办法检测 SSH 进程的 PID?
或者是否有其他更好的方法来解决该任务?
答案1
看https://stackoverflow.com/questions/2241063/bash-script-to-setup-a-temporary-ssh-tunnel包含控制套接字和 ExitOnForwardFailure 的答案。