多步骤 ssh-可能吗?

多步骤 ssh-可能吗?

假设有三台计算机 AB 和 C。B 和 C 是远程计算机,但在同一个本地网络中。

我从计算机 A 通过 SSH 进入计算机 B。现在可以从 B 通过 SSH 进入 C 吗?

答案1

这是完全有可能的。不仅如此,在 SSH 中还有方法可以自动执行此过程(实际上有超过 1 种)。

许多“安全”系统都采用这种方法,即服务器 C 仅信任服务器 B,每个人都需要通过它进行 SSH。这种主机的名称称为堡垒。

  • 如上所述,您可以通过 SSH 连接到 B,然后从 B 可以通过 SSH 连接到 C。

您还可以设置 B 来验证并将连接转发到 C,甚至无需在 B 上获取 shell - 可以使用 SSH 转发,也可以让 B 上的 SSHon 识别登录并立即登录到 C。

答案2

是的,这不仅是可能的,而且相当常见,因此是一个受支持的用例;正确的搜索词是堡垒主机跳转主机, 或者ssh 代理

  • 最好的方法是使用ProxyJump选项ssh,指定为-J旗帜,它将通过 hostB 建立到 hostC 的连接:
    # on host A
    ssh -J userB@hostB userC@hostC
    
  • 一个更灵活的选择是ProxyCommand选项,可以使用任何使用以下命令的 stdin/stdout 连接目标主机:
    ssh -o ProxyCommand "ssh userB@hostB -W %h:%p" userC@hostC
    
    这将首先启动ssh连接到 hostB 的第二个客户端,然后-W将会把它的 stdin/stdout 连接到 hostC [ %h] 上的 ssh 端口 [ %p]。
  • 为了更加方便,您可以在 中指定所有这些选项.ssh/config,这样您就可以连接ssh hostC
    Host hostC
      User userC
      ProxyJump userB@HostB
      # alternatively using ProxyCommand:
      #ProxyCommand ssh -W %h:%p userB@hostB
    

如果由于某种原因您无法使用ProxyJumpProxyCommand/ ,您可以自行设置隧道端口转发:ssh -W %h:%p

# start a ssh process in the background to forward
# from localhost (host A) port 2222 to port 22 on hostC from hostB
ssh -f -N -L localhost:2222:hostC:22 userB@hostB

# connect to localhost:2222 which is tunneled to hostC:22
ssh -p 2222 userC@localhost

答案3

好吧,如果系统 B 可以通过 tcp 端口 22 到达系统 C,并且在 C 上有一个 SSH 守护程序在运行,您有一个有效的用户 - 是的!

相关内容