正确关闭多跳 SSH 隧道

正确关闭多跳 SSH 隧道

我想将 VNC 流量通过隧道传输到host2,该流量只能从 访问host1,而host1可以公开访问。

我按照中所述设置了多跳 SSH 隧道这个问题, 使用:

ssh -L 5901:localhost:6000 host1 ssh -L 6000:localhost:5901 -N host2

这确实可以完美地完成工作。但是,我不知道如何正确关闭嵌套隧道。我试过Ctrl+c但这似乎是杀掉第一ssh例地host1。但是,和ssh之间的第二条隧道保持开放,这是非常不希望的,因为任何人实际上都可以通过它转发流量。host1host2

另外,通过-N选项,我没有得到实际的ttyon host2,所以我不能简单地exit从那里开始。如果没有,,-N我仍然没有得到 a tty,而是收到以下错误:

Pseudo-terminal will not be allocated because stdin is not a terminal.
Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.
term: Undefined variable.

我从 MacOS X 开始连接,主机 1 和主机 2 都运行 RHEL 6。

答案1

您使用 tty 的方式是正确的,该-t选项正是为您提供的。但是,除非您实际上的目标是获得 tty 会话进行交互,否则请将此选项保留在链中的最后一个 ssh 命令中。在您的情况下,您只需要在第一次连接时使用它:

ssh -L 5901:localhost:6000 host1 -t ssh -L 6000:localhost:5901 -N host2

现在当你使用Ctrl-C,隧道将在所有主机之间建立。

相关内容