使用 JumpProxy 和 Keys 建立 SSH 隧道,无需配置

使用 JumpProxy 和 Keys 建立 SSH 隧道,无需配置

对于以下设置:

网络图显示内部网络计算机、外围堡垒主机和尝试连接的远程计算机

机器 A 可以使用命令通过 SSH 连接到 Bastion 主机:

ssh -i keyA.pem user@bastion_host

如何使用单个 SSH 命令连接到计算机 C(内部服务器),例如无需使用 .ssh/config当机器 C(内部服务器)使用它自己的密钥(密钥 B)时,它们保存在机器 A(本地机器)上,而不是机器 B(堡垒主机)上

如何使用跳转参数(例如,从机器 A 使用 ssh -J user@ip_address)连接到机器 C?例如,像这样

ssh -J bastionUser@Bastion_host -i keys_A.pem serverUser@Inner_Server -i key_B.pem

答案1

有两种方法可以做到这一点

1.通过 ssh-add 命令为 ssh-agent 添加密钥

在本地机器(即机器A)上为机器B添加密钥A

ssh-add path_to_keyA/key_A.pem

在本地机器(即机器A)上为机器C添加密钥B

ssh-add path_to_keyB/key_B.pem

然后使用ssh命令连接

ssh -v username@Machine_C -o "ProxyCommand=ssh -W %h:$p username@Machine_B"
  • -v 只是输出正在发生的事情
  • 您需要将每台机器的用户名替换为远程机器上配置的用户名
  • 在您的设置中将 Machine_C 和 Machine_B 替换为主机名或 IP 地址

2. 无需向代理添加密钥

如果你只想通过单个命令进行连接而不使用代理,那么你可以使用

ssh -v -i path_to_key_B/key_B.pem username@Machine_C -o "ProxyCommand=ssh -i path_to_key_A/key_A.pem -W %h:%p username@Machine_B"

再次...

  • -v 只是输出正在发生的事情
  • 您需要将每台机器的用户名替换为远程机器上配置的用户名
  • 在您的设置中将 Machine_C 和 Machine_B 替换为主机名或 IP 地址
  • -i 标志后面跟着的是本地机器(即机器 A)上各个键的位置

如果出现密钥权限问题,请确保密钥sudo chmod 600 密钥文件名.pem

相关内容