我已经testing了几个服务器(RedHat,Ubuntu)上的hostname -f ,而且hostname -f已经被certificate是不可靠的,只返回短名(正如这个问题所描述的那样)。
我可以在别名中看到fqn: hostname -a (其中一个别名是我查找的fqn),但别名的顺序不固定。
有没有另一种方法来获得完全合格的名称可靠,并将其存储在一个bashvariables?
我在CentOS5上试过这个:
host -TtA $SERVERNAME|grep "has address"|awk '{print $1}'
我必须在TCP模式下查询我的DNS。 如果UDP在您的环境中工作,请不要使用“T”选项。
注意:在一个Ubuntu 客人 (VirtualBox)上它不会工作:
git@aHostname:~/$ host -TtA $(hostname -s) Host aHostname not found: 3(NXDOMAIN)
所以要涵盖所有的情况:
fqn=$(host -TtA $(hostname -s)|grep "has address"|awk '{print $1}') ; \ if [[ "${fqn}" == "" ]] ; then fqn=$(hostname -s) ; fi ; \ echo "${fqn}"
你的方法只有在你正确地configuration了你的主机名,并且有正确的dns设置等的情况下才起作用。如果你有这些,那么你已经知道你的fqdn了。
没有可靠的方法来获得fqdn。 一个IP地址可以有多个fqdn,一个fqdn可以有多个IP地址……许多IP根本没有任何fqdn。
如果您的机器直接连接到互联网,只需使用IP地址并进行反向DNS请求: host 1.2.3.4
但是,这往往不会给你想要的答案(只是尝试与谷歌例如)。
这是我findfqn的一个方法:
fqn=$(nslookup $(hostname -i)) ; fqn=${fqn##*name = } ; fqn=${fqn%.*} ; echo $fqn
换句话说,我不得不nslookup的IP地址,这给了我这样的:
Server: 128.xxx.yyy.zzz Address: 128.xxx.yyy.zzz#ww aa.bb.cc.dd.in-addr.arpa name = myserver.fully.qualified.name.
从那里,这只是一个通过bashstring操作去除我不想要的东西的问题。
也许有一个更简单的方法?
对于跨平台的替代,如果你不介意使用python(python3)
python -c 'import socket; print(socket.getfqdn())'
不hostname --fqdn为你工作?
在Ubuntu中,你可以做hostname -A