在 Cygwin 上,我想要一个 Bash 脚本来:
- 创建到远程服务器的 SSH 隧道。
- 在本地使用隧道做一些工作。
- 然后关闭隧道。
关闭部分让我感到困惑。
目前,我有一个蹩脚的解决方案。在一个 shell 中,我运行以下命令来创建隧道:
# Create the tunnel - this works! It runs forever, until the shell is quit.
ssh -nNT -L 50000:localhost:3306 jm@sampledomain.com
然后,在另一个 shell 窗口中,我开始工作:
# Do some MySQL stuff over local port 50000 (which goes to remote port 3306)
最后,当我完成后,我关闭了第一个 shell 窗口以终止隧道。
我想在一个脚本中完成这一切,例如:
# Create tunnel
# Do work
# Kill tunnel
我如何跟踪隧道进程,以便知道要杀死哪个进程?
最佳答案
您可以使用 ssh“控制套接字”干净地完成此操作。与一个已经运行的 SSH 进程对话并获取它的 pid,杀死它等。使用“控制套接字”(-M 代表主控,-S 代表套接字)如下:
$ ssh -M -S my-ctrl-socket -fNT -L 50000:localhost:3306 jm@sampledomain.com
$ ssh -S my-ctrl-socket -O check jm@sampledomain.com
Master running (pid=3517)
$ ssh -S my-ctrl-socket -O exit jm@sampledomain.com
Exit request sent.
请注意,my-ctrl-socket 将是创建的实际文件。
我从 a very RTFM reply on the OpenSSH mailing list 得到了这个信息.
关于用于设置临时 SSH 隧道的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2241063/