通过多个主机或堡垒进行 SSH

通过多个主机或堡垒进行 SSH

目前,按照正常程序,我们在云网络中的每个公共子网中都有一个堡垒服务器,我们尝试通过以下配置访问它 -

Host webserverA
    User myuser
    Hostname 192.168.1.10
    ForwardAgent yes
    Port 22
    ProxyCommand ssh -q bastionA nc %h %p
    IdentityFile ~/webserver.pem

有没有办法我可以将此模型扩展为拥有另一个堡垒服务器?

堡垒 B -> 堡垒 A -> Web 服务器 A?

原因是我想将其视为信任链。当发生相当糟糕的事件时,删除一些东西。

我所说的 CoT 的意思是,如果一组用户离开,我们可以更改第一组密钥,这样我们就可以阻止他们进一步访问。

答案1

方法 1 – 洋葱(嵌套隧道)

使用 OpenSSH 7.3 及更高版本:

Host webserverA
    ProxyJump bastionA,bastionB

通过命令行也是一样:

$ ssh -J bastionA,bastionB webserverA

或者(也与 7.3 一起使用;将此与以上内容混合):

Host webserverA
    ProxyJump bastionB

Host bastionB
    ProxyJump bastionA

与旧版本相比 – 大部分相同(但不会自动复制如下选项ssh -v):

Host webserverA
    ProxyCommand ssh bastionB -W %h:%p

Host bastionB
    ProxyCommand ssh bastionA -W %h:%p

此方法在本地启动所有连接,为每个步骤设置ssh -W隧道。因此身份验证在本地进行(不需要 ForwardAgent 和 GSSAPIDelegateCredentials),并且您的本地.ssh/config也适用于每个步骤。在服务器端,只需要基本的“TCP 转发”支持,与使用-W或时相同-L

但是,每一层都会增加额外的开销,因为它最终会在 SSH 中承载 SSH 中的 SSH 。

请注意,除最外层主机外,每个主机都通过紧接在其之前的服务器列出 ProxyCommand。如果您有 3 个服务器,则可以使用 [webserverA via bastionC]、[bastionC via bastionB] 和 [bastionB via bastionA]。

方法 2 – 逐跳

Host webserverA
    ProxyCommand ssh bastionA -A ssh bastionB -W %h:%p

此方法逐跳启动连接,在每一跳上运行以连接到下一跳。因此必须启用sshssh-agent 和(或者如果您使用 Kerberos);必须将任何其他特殊设置复制到所有堡垒主机。ForwardAgentGSSAPIDelegateCredentials.ssh/config

另一方面,它产生的协议开销较少(每一步最多两层)。

(编辑:添加-A始终请求代理转发。)

相关内容