目前,按照正常程序,我们在云网络中的每个公共子网中都有一个堡垒服务器,我们尝试通过以下配置访问它 -
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
此方法逐跳启动连接,在每一跳上运行以连接到下一跳。因此必须启用ssh
ssh-agent 和(或者如果您使用 Kerberos);必须将任何其他特殊设置复制到所有堡垒主机。ForwardAgent
GSSAPIDelegateCredentials
.ssh/config
另一方面,它产生的协议开销较少(每一步最多两层)。
(编辑:添加-A
始终请求代理转发。)