![在 SSH ProxyCommand 中包含远程转发](https://linux22.com/image/1544587/%E5%9C%A8%20SSH%20ProxyCommand%20%E4%B8%AD%E5%8C%85%E5%90%AB%E8%BF%9C%E7%A8%8B%E8%BD%AC%E5%8F%91.png)
所以我有3个服务器:
- server_a:我的目标服务器
- server_b:跳转服务器
- server_c:另一台服务器
通常,server_a 和 server_b 都无法访问 server_c。但是,我可以使用远程转发的魔力,为 server_c 提供 server_a 上的特定端口。以下命令可实现此目的:
ssh -t -A -R 6880:server_c:22 server_b ssh -t -A -R 6880:localhost:6880 server_a
我想将这个庞大的命令转换为等效的 ssh_config 设置。我可以通过使用代理命令来使基本的 ssh/scp 连接正常工作:
host server_b
Hostname 192.X.X.X
User john
IdentityFile /path/to/identity_file
ForwardAgent yes
Host server_a
Hostname 172.X.X.X
User john
ProxyCommand ssh -W %h:%p server_b
但上述配置不执行任何远程转发,server_a 根本无法访问 server_c。我尝试添加 RemoteForward 行来实现这一点:
host server_b
Hostname 192.X.X.X
User john
IdentityFile /path/to/identity_file
ForwardAgent yes
RemoteForward 6880 server_c:22
Host server_a
Hostname 172.X.X.X
User john
ProxyCommand ssh -W %h:%p server_b
RemoteForward 6880 localhost:6880
如果我直接通过 ssh 进入 server_b,似乎远程转发到 server_c 是没问题的,但是当我从我的笔记本电脑直接通过 ssh 进入 server_a 时,通过远程转发访问 server_c 似乎不起作用。
任何建议,将不胜感激
答案1
ProxyCommand 是不是与使用相同ssh server_b ssh server_a
。它允许第二个ssh
客户端运行本地并仅通过隧道来讲 SSH 协议。
因此你不需要任何跳转主机的转发参数,仅有的最后的连接:
Host server_a
ProxyCommand ssh -W %h:%p server_b
RemoteForward 6880 server_c:6880
Host server_b
# no RemoteForward
# no ForwardAgent, either!
此外,如果您将本地 OpenSSH 客户端更新到 7.3 或更高版本,则可以使用该-J
选项(又名 ProxyJump)作为快捷方式。例如,这等于上述配置:
Host server_a
ProxyJump server_b
RemoteForward 6880 server_c:6880
命令行中也是一样:
$ ssh -R 6880:server_c:6880 -J server_b server_a