我想要实现的是能够target.server
使用以下命令从本地计算机连接到某些设备,而无需输入任何密码:
ssh [email protected]
ssh [email protected]
上述每个用户只接受来自特定IP地址的连接,分别对应gateway1.example
和gateway2.example
。我已将所有必需的 SSH 密钥添加到右侧authorized_keys
,这样我就可以执行以下操作,而无需输入密码:
ssh [email protected]
从本地机器,然后从.ssh [email protected]
gateway1
ssh [email protected]
从本地机器,然后从.ssh [email protected]
gateway2
现在我认为仍然需要将正确的东西放入我的本地~/.ssh/config
.当我添加:
Host target.server
ProxyCommand ssh -o 'ForwardAgent yes' [email protected] 'ssh-add && nc %h %p'
然后工作。但我不知道如何使两者同时工作。我试过:ssh [email protected]
user1
user2
Host target.server
User user1
ProxyCommand ssh -o 'ForwardAgent yes' [email protected] 'ssh-add && nc %h %p'
Host target.server
User user2
ProxyCommand ssh -o 'ForwardAgent yes' [email protected] 'ssh-add && nc %h %p'
或者
Host target.server
User user1
ProxyCommand ssh -o 'ForwardAgent yes' [email protected] 'ssh-add && nc %h %p'
User user2
ProxyCommand ssh -o 'ForwardAgent yes' [email protected] 'ssh-add && nc %h %p'
但它仍然不起作用user2
:一切都通过了gateway1
,但没有gateway2
。
预先非常感谢您的帮助!
更新:我已经能够使以下命令起作用:
ssh user1
ssh user2
(不带@target.server
),使用以下配置:
Host user1
HostName target.server
User user1
ProxyCommand ssh -o 'ForwardAgent yes' [email protected] 'ssh-add && nc %h %p'
Host user2
HostName target.server
User user2
ProxyCommand ssh -o 'ForwardAgent yes' [email protected] 'ssh-add && nc %h %p'
这就是我将要使用的,但我仍然很好奇看到这个问题开头的两个命令的解决方案。
答案1
正如您所发现的,别名是一个很好的解决方案。如果您不想使用它们,该Match
指令可能是另一个有效的选项。
Host target.server
Match User user1
ProxyCommand ssh -o 'ForwardAgent yes' [email protected] 'ssh-add && nc %h %p'
Match User user2
ProxyCommand ssh -o 'ForwardAgent yes' [email protected] 'ssh-add && nc %h %p'
从ssh_config
手册页:
匹配 限制以下声明(直到下一个主持人或者匹配关键字)仅在以下条件时使用匹配关键字满足。