OpenSSH 是否支持多跳登录?

air*_*aft 3 ssh openssh ssh-tunnel ansible

Ansible 使用 OpenSSH 作为底层网络通信实现,但是它支持多跳登录吗?

我的意思是,如果 Ansible 可以直接登录服务器,但是它可以登录 server_a 然后从 server_a 登录 server_b 来配置 server_b 吗?

Mar*_*ryl 8

我不知道 Ansible 如何使用 OpenSSH。


但是 OpenSSH 本身支持“多跳登录”

从 OpenSSH 7.3 开始,您可以使用-J(跳转)开关,例如:

ssh -J user1@host1.example.com user2@host2.example.com
Run Code Online (Sandbox Code Playgroud)

-J是同等ProxyJump指令

ssh -o ProxyJump=user1@host1.example.com user2@host2.example.com
Run Code Online (Sandbox Code Playgroud)

请注意,文件传输工具,如scpsftp,该-J开关,因为只有8.0的支持。对于旧版本(但至少 7.3),请使用ProxyJump. 请参阅如何从我只能通过另一台主机通过 SSH 连接的主机下载文件?

另请注意,这些版本是指 OpenSSH 的本地版本。与远程版本的 OpenSSH 无关。


正如@GordonDavisson 评论的那样,对于旧版本(但至少是 5.4),您可以使用ProxyCommand指令-W开关

ssh -o ProxyCommand="ssh -W %h:%p user1@host1.example.com" user2@host2.example.com
Run Code Online (Sandbox Code Playgroud)

对于更旧的版本,您可以使用nc命令而不是-W

ssh -o ProxyCommand="ssh user2@%h nc host2.example.com 22" \
    -o HostKeyAlias=host2.example.com \
    host1.example.com
Run Code Online (Sandbox Code Playgroud)

Wikibooks 文章OpenSSH/Cookbook/Proxies 和 Jump Hosts中详细介绍了上述所有选项 。


另一种选择是使用端口转发(-Lswitch)。但这涉及两个ssh实例。我不确定 Ansible 是否可行。