假设有三台计算机 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
如果由于某种原因您无法使用ProxyJump
和ProxyCommand
/ ,您可以自行设置隧道端口转发: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 守护程序在运行,您有一个有效的用户 - 是的!