在 SSH ProxyCommand 中包含远程转发

在 SSH ProxyCommand 中包含远程转发

所以我有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

相关内容