我可以将 SSH 别名用作主机名的一部分吗?

我可以将 SSH 别名用作主机名的一部分吗?

我在一个域下有一堆我经常连接的机器; apollo.my.university.edu hades.my.university.edu zeus.my.university.edu 我对每台机器都使用相同的配置设置。我不需要在我的 中输入所有配置.ssh/config

Host apollo
    Hostname apollo.my.university.edu

Host hades
    Hostname hades.my.university.edu

Host zeus
    Hostname zeus.my.university.edu

有没有类似 makefile 的方法,可以使用别名同时完成所有主机名?比如

Host apollo hades zeus
    Hostname *.my.university.edu

答案1

尝试

Host apollo hades zeus
    Hostname %h.my.university.edu

如果我读得man ssh_config正确的话,这应该可以实现你想要的效果。

HostName
         Specifies the real host name to log into.  This can be used to specify nicknames
         or abbreviations for hosts.  If the hostname contains the character sequence
         `%h', then this will be replaced with the host name specified on the command
         line (this is useful for manipulating unqualified names).  The default is the
         name given on the command line.  Numeric IP addresses are also permitted (both
         on the command line and in HostName specifications).

答案2

除了使用ssh_configdemure 所示的方法外,您还可以让 DNS 查找在没有其他匹配项时考虑您的域。为此,请将以下内容添加到文件中/etc/resolv.conf

search my.university.edu

这样,您甚至不需要将主机添加到~/.ssh/configssh zeus解析器会为您找到合适的主机。由于它发生在解析器级别,因此它也适用于其他程序,例如curl和 Firefox。

请注意,像 NetworkManager 这样的程序会覆盖resolv.conf。对于 NetworkManager,您需要更改搜索域名设置为my.university.edu

文档:

相关内容