原始问题

原始问题

免责声明:最初我在 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

文档

相关内容