我可以配置ubuntu将域附加到ssh主机名请求的末尾吗?


9

我有很多服务器,而且它们都以相同的servers.company.net结尾,因此例如vded-xx-001.servers.company.net,并且想知道是否可以这样做,所以我可以只键入vded- xx-001并将其自动附加到servers.company.net吗?

所以我想输入

ssh user@vded-xx-001

并使其实际连接到

ssh user@vded-xx-001.servers.company.net

我尝试在/ etc / network / interfaces中将DNS搜索域设置为servers.company.net,但这没有达到期望的结果。

有人能指出我正确的方向吗?

提前致谢


有什么原因不能只添加search company.net到/etc/resolv.conf吗?
Hennes

@Hennes将搜索company.net和server.company.net添加到resolv.conf已成功。但是,在文件顶部有一个警告,我的更改将被覆盖,如果是这种情况,我如何使它们永久化?
Tim Lassie Freeborn

1
我很想回答这个问题并获得额外代表,但这篇文章已经很好地回答了这一问题::-) askubuntu.com/questions/157154/…–
Hennes

实际上,与该问题所讨论的相反,通常最好在/etc/network/interfaces(使用dns-search选项)或在NetworkManager连接配置字段中包括搜索域列表Search domains
jdthood

该解决方案比使用本地解析器配置更简单,并且更易于移植。
OrangeDog

Answers:


19

可能您已经解决了这个问题,但稍后可能会帮助某人:您无需弄乱您的resolv.conf,只需在您的代码中使用以下内容即可~/.ssh/config

Host vded-*-001 test-*-something-fixed-*
        HostName %h.servers.company.net
        User someusername

所以以后您可以使用:

ssh vded-alotofstuff-001
ssh vded-somethingels-001
ssh test-02-something-fixed-somethingelse

这应该是公认的答案。
slm

这是解决问题的一种方法,但是并不能解决整个系统的名称解析问题,它只能解决ssh主机名的问题。对我来说,最佳实践是能够在系统范围内获得正确的主机名,而不必自定义特定服务(ssh)即可解析特定主机名
Philippe Gachoud

1
万一我忘了,后来再看这件事,如果你想允许短期和长期的名字,同时共享相同的配置,只需指定一个第1项Host vded-*.servers.company.net,有Hostname %h。然后在Host vded-*带有Hostname %h.servers.company.net和所有其他参数(如User,IdentityFile等)的第二个条目中
bksunday

6

这是最简单的解决方案。它适用于所有主机,不需要root或对任何DNS /解析器系统的访问。

添加到~/.ssh/config文件的顶部(如果不存在,则创建):

CanonicalizeHostname yes
CanonicalDomains servers.company.net

说明文件(man 5 ssh_config):

规范化主机名

控制是否执行显式主机名规范化。缺省值no是不执行任何名称重写,并让系统解析器处理所有主机名查找。如果设置为yes,则对于不使用ProxyCommand的连接,ssh将尝试使用CanonicalDomains后缀和CanonicalizePermittedCNAMEs规则对命令行上指定的主机名进行规范化。如果CanonicalizeHostname设置为always,则规范化也将应用于代理连接。

如果启用此选项,那么将使用新的目标名称再次处理配置文件,以在匹配的HostMatch节中获取任何新配置。


最适合我。您不必添加CanonicalDomains,只需添加第一行。这样,即使您连接到其他网络,它也能正常工作。
亚当·沃纳

2
@AdamWallner,如果您不添加CanonicalDomains它,则它将在当前网络的搜索域上工作。如果您这样做(并且可以列出多个),那么它将在您可能连接到的任何网络上解析所有这些主机名。
OrangeDog

正如文档所述,@ deed02392正是它的作用。
OrangeDog

2

是的,您可以通过创建一个名为的配置文件~/.ssh/config并输入以下内容来做到这一点:

Host vded-xx-001
User user
Port 22
HostName vded-xx-001.servers.company.net

现在,您只需要键入以下内容(您甚至不再需要用户名):

$ ssh vded-xx-001

这也可以与命令行实用程序一起使用scp

$ scp filename vded-xx-001:/path/

1
我知道这适用于单个主机,但是我有数百个主机,希望我可以创建一条规则,以VDED- *开头,然后为主机名添加host.servers.company.net
Tim Lassie Freeborn

1
@TimLassieFreeborn:您可以编写一个脚本来生成配置文件所需的条目。不过,我不知道您是否可以动态进行。
Flimm

@TimLassieFreeborn看到我的答案
OrangeDog

2

解决我的问题的方法是将搜索域添加到resolv.conf

search servers.company.net

这使我可以进入

ssh user@vded-xx-001

对于我的任何服务器,它都连接到正确的地址。

谢谢@Hennes的回答


2
假设您正在运行Ubuntu 12.04或更高版本,则不应直接编辑/etc/resolv.conf,因为resolvconf实用程序会生成该文件。(实际上,它生成/run/resolvconf/resolv.conf,/etc/resolv.conf是符号链接。)相反,您应该通过接口配置程序ifup或NetworkManager来配置DNS设置。Ifup:编辑/ etc / network / interfaces并dns-search servers.company.net在节中为机器的外部网络接口添加一行。NM:添加servers.company.netSearch domainsIPv4选项卡上的连接字段。
jdthood 2013年

如果/etc/resolv.conf不是../run/resolvconf/resolv.conf您计算机上的符号链接,请运行sudo dpkg-reconfigure resolvconf以恢复该符号链接。
jdthood 2013年

1

如果您使用的是SSH身份-并且有那么多服务器值得一看-那么如OrangeDog所说,设置CanonicaliseHostname和CanonicaliseDomains还将使您与已知主机中的@ cert-authority条目匹配

已知主机条目@ cert-authority * .example.com ssh-rsa AAAddadfkjaeio ...

如果没有Canonicalise选项,则需要使用“ ssh host.example.com”

使用Canonicalise选项,“ ssh myhost”将匹配。

如果允许代表,我会将其添加为OrangeDogs答案的注释...


0

对于适用于不同程序的快速解决方案,您还可以vded-xx-001通过编辑/etc/hosts以下行来将域设置为重定向到特定IP地址:

173.194.41.90  vded-xx-001

这在您的浏览器中有效: http://vded-xx-001/

以及像SSH这样的命令行实用程序:

$ ssh user@vded-xx-001

(不过,我个人更喜欢SSH配置解决方案。)


0

对于系统范围的域名解析,我希望一次在网络中进行设置。因此,我在DHCP服务器中设置了域名和DNS服务器,以便它赋予所有计算机正确的权限,resolv.conf包括

  • 主DNS服务器IP
  • 搜索指令

这取决于您想要的DHCP服务器和网络配置...我个人不喜欢计算机自定义配置,因为它对网络通用

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.