我目前正在设置我的 Linux 系统,以使一些日常任务变得更容易。我想将 SSH 配置为能够使用终端跳转主机。我读到了有关 LocalForward 和 ProxyJump 的内容。目标是连接到第一台服务器,通过它建立连接隧道,然后连接到第二台服务器(因为第二台服务器位于我只能从第一台服务器到达的区域中)。
现在我所做的是 ~/.ssh/config 文件中的以下代码片段:
Host tunnel
HostName <firstServer>
IdentityFile ~/.ssh/example.key
LocalForward 9906 <secondServer>:22
User helloWorld
如果我现在使用“ssh 隧道”连接到服务器,我可以成功连接到第一台服务器。如果我现在使用 telnet 使用“telnet secondaryServer 9906”检查第二台服务器,我可以看到 SSH 正在其上运行。如果我现在尝试使用“ssh localhost:9906”通过 SSH 连接到第二个服务器,我会得到主机名无法解析的信息(对于 127.0.0.1:9906 也是如此)。
后来我读到了“ProxyJump”选项并尝试了以下操作:
Host tunnel
HostName <firstServer>
ProxyJump <secondServer>:22
User helloWorld
然而,连接永远不会建立。它卡在“连接到”上。
我在这里遗漏了一些明显的东西吗?也许我误解了整个 SSH 转发的基本概念?我习惯使用 Putty,但最近我转向 Linux,并希望适当地设置一切。
答案1
这个~/.ssh/config将通过ProxyJump跳到目标,并将端口一直绑定到目标:
Host jump
HostName <server-ip>
User user-name
IdentityFile ~/.ssh/key.pem
LocalForward 8888 localhost:8888
Host target
HostName <server-ip>
User user-name
IdentityFile ~/.ssh/key.pem
ProxyJump jump
LocalForward 8888 localhost:8888
用法:
答案2
我们在我们的团队中使用这个 oneliner:
$ ssh zone_user@zone_host -o ProxyCommand="ssh -W %h:%p proxy_user@proxy_host"
笔记:
- 确保两者都存在
proxy_user@proxy_host
并且zone_user@zone_host
您的私钥位于~/.ssh/authorized_keys
. - 您不必分配和“隧道”额外的端口来通过 SSH 转发 SSH。
- 我不建议过多地摆弄
~/.ssh/config
,它很容易出错,而且文档不友好。最好分享一下像上面那样的单线。
干杯!