我在一个环境中工作,我有多个环境的多个 ssh 密钥,所有这些都使用堡垒主机,这意味着可以 ssh 到任何环境中的任何盒子,这是一个两步跳跃,首先到堡垒,第二个到堡垒目标盒子,并且我的 ssh 身份必须全程随身携带。
我知道 ssh 和 .ssh/config 都可以选择将您当前的所有 ssh 身份转发到堡垒主机,以便您可以在那里重新使用它们:
ssh -A IPADDRESS
和ForwardAgent
此外,我知道 .ssh/config 有一个IdentityFile
选项,允许我根据我尝试连接的主机指定使用哪个 ssh 密钥。然而,我注意到的是,IdentityFile 选项使用的任何身份都不会由ForwardAgent
- 我将其转发到堡垒主机,但如果没有我的密钥,我无法 ssh 到下一个盒子。
到目前为止,我能够完成此任务的唯一方法是手动添加我需要使用的身份ssh-add ~/.ssh/id_rsa[1-10]
,然后使用ForwardAgent
或进行 ssh ssh -A
。然而,当我需要在多个身份之间切换时,这可能会很痛苦。
有没有一种方法可以仅使用 ssh 配置文件来完成所有这些?
答案1
执行上述操作的一种更简洁的方法ProxyCommand
是使用ProxyJump
;你的 SSH 配置将如下所示:
Host bastion.host
User user1
IdentityFile ~/.ssh/id_bastion
Host remote.host
User user2
IdentityFile ~/.ssh/id_remote
ProxyJump bastion.host
答案2
你需要 :
IdentityFile ~/.ssh/id_bastion
AddKeysToAgent yes
ForwardAgent yes
查看man ssh_config | less +/AddKeysToAgent
答案3
您是否尝试过使用 ProxyCommand ?假设您想连接为[电子邮件受保护]通过透明地通过[电子邮件受保护]帐户。以下配置即可实现这一目标:
Host bastion.host
User user1
IdentityFile ~/.ssh/id_bastion
Host remote.host
User user2
IdentityFile ~/.ssh/id_remote
ProxyCommand ssh bastion.host -W %h:%p
此设置的另一个优点是它允许其他命令(例如 git、sshfs、rsync...)使用相同的凭据通过堡垒主机“直接”连接到 remote.host。
编辑:在您的设置中,每个主机共享相同的堡垒,因此您甚至可以在添加更具体的主机之前将 ProxyCommand 与通配符主机分开:
Host remote.*
ProxyCommand ssh bastion.host -W %h:%p
Host remote.host1
IdentityFile ...
Host remote.host2
....