免责声明:最初我在 StackOverflow 上问了这个问题,它被合理地标记为离题,我认为它更适合这里。与此同时,我发现问题(见下面的中间解决方案)。
原始问题
我在 Windows 客户端上,想要通过 SSH 连接到 Ubuntu 客户端。
我的配置(在职的)如下所示:
Host myhost
ForwardAgent Yes
Host myuser@myhost
HostName myhost
User myuser
我可以连接,转发工作如预期,以便ssh-add -l
远程显示来自我的连接客户端的身份。
现在,我不明白的是,为什么以下配置不行:
Host myuser@myhost
ForwardAgent Yes
HostName myhost
User myuser
在这种情况下,我至少可以通过 SSH 连接,但转发不起作用,因此ssh-add -l
再次运行会返回:
无法打开与您的身份验证代理的连接。
对我来说,第二种配置看起来基本相同,但只需一步而不是两步。
我在这里遗漏了什么?
我尝试过
我收到的一个建议是将@
标牌换成另一个。不幸的是,这个方法行不通。
然后我做了一些小改动,例如小写yes
。什么都没改变。
中间解决方案
在真正尝试之后尝试和错误-style。我发现第一个Host
命名风格是可以的:
Host myhost
HostName myhost
User myuser
ForwardAgent yes
Host
事实证明,我可以改变但我不能包括来自User
? 的名字,这原来是一个模式。
问题
- 有人知道为什么
User
不允许吗? - 当我想包含另一个规范但与另一个用户一起时,最佳做法是什么? 我的第一个配置遵循了这一意图,请参阅:
Host user1@myhost
HostName myhost
User user1
ForwardAgent yes
Host user2@myhost
HostName myhost
User user2
ForwardAgent yes
这是行不通的。
也不起作用:
Host myuser-myhost
HostName myhost
User myuser
ForwardAgent yes
或者
Host myhost-myuser
HostName myhost
User myuser
ForwardAgent yes
或者
Host myhostmyuser
HostName myhost
User myuser
ForwardAgent yes
Host myusermyhost
HostName myhost
User myuser
ForwardAgent yes
甚至不
Host mymyuserhost
HostName myhost
User myuser
ForwardAgent yes
真的很困惑。那么我该如何区分两个不同用户的配置呢?只能通过两个不同的文件来区分吗?
答案1
Host
应该匹配作为命令行参数给出的主机名ssh
,例如ssh host
。它可以是带有通配符的模式,例如*
或?
。它不包含用户名。当您使用命令连接时ssh user1@myhost
,该参数将分为用户名user1
和主机名myhost
,并且主机名将与指令匹配Host
。由于符号@
不是通配符,因此您Host user1@myhost
永远不会匹配myhost
。
如果您希望配置仅应用于特定用户,那么您需要使用指令Match
而不是Host
,如下所示:
Match host myhost user user1
看文档。