【发布时间】:2018-02-08 21:17:37
【问题描述】:
我正在尝试创建一个多跳 ssh 隧道,它在后台,并且自动关闭。我所拥有的是……
ssh -L 9999:localhost:9999 user@host1 -t ssh -L 9999:localhost:27017 -N
-i ./mypem.pem user@host2
这成功创建了一个多跳 ssh 隧道,在我关闭隧道后关闭 host1 上的端口。但是,如果我尝试将它分叉到后台,就像这样......
ssh -f -L 9999:localhost:9999 user@host1 -t ssh -L 9999:localhost:27017
-N -i ./mypem.pem user@host2
它在后台运行,但在本地杀死进程确实会打开主机 1 上的端口。
关于自关闭、多跳、后台 ssh 隧道的任何想法?谢谢!
【问题讨论】:
-
-o "ExitOnForwardFailure yes"工作吗? -
我试了一下:
ssh -f -o ExitOnForwardFailure=yes -L 9999:localhost:9999 user@host1 ssh -L 9999:localhost:27017 -N -i ./mypem.pem user@host2但是同样的问题,当我在本地关闭隧道时,主机上的 9999 没有打开。所以如果我尝试重新打开隧道,我会得到bind: Address already in use -
好的,要么尝试
-o "ClearAllForwardings yes",要么转发ProxyCommand和-W -
您是否尝试过不使用
-N,然后在末尾附加sleep X。比如:ssh -f -L 9999:localhost:9999 user@host1 -t 'ssh -L 9999:localhost:27017 -i ./mypem.pem user@host2 "sleep 3600"' -
我会切换到 ProxyCommand 方法;它在很多方面都更清洁。请参阅serverfault: "How do I do Multihop SCP transfers?"(同样适用于普通 SSH 和端口转发)和backdrift: "Using SSH ProxyCommand to Tunnel Connections"。
标签: linux bash shell ssh tunnel