0xC*_*22L 18 ssh 10.04 resolv.conf 12.04
我正在尝试通过 SSH 从 10.04 系统连接到 12.04 系统。奇怪的是,中的规则resolv.conf似乎只是有选择地生效,这让我感到困惑。观察:
[2] user@mach:~$ ssh pangolin
ssh: Could not resolve hostname pangolin: Name or service not known
[2] user@mach:~$ host pangolin
pangolin.subdomain.domain.tld has address 172.16.7.12
Run Code Online (Sandbox Code Playgroud)
subdomain.domain.tld是在search排队/etc/resolv.conf,并使用host该名称是否正确找遍给出的规则。但是,使用 SSH 客户端时,ssh我收到了上面重现的错误。怎么会这样?我一直认为名称解析规则resolv.conf适用于系统全局。
注意:/etc/hosts根本不声明名称pangolin。包openssh-server在目标机器上配置。问题纯粹是关于为什么这两个程序之间的名称解析不一致。
另一个注意事项:当我输入完全限定的域名时,该命令可以正常工作,即pangolin.subdomain.domain.tld.
同时我重新启动了客户端机器(10.04),问题仍然存在。没有安装 DNS 缓存守护进程,所以我认为这应该不是问题。
评论中要求的信息:
$ grep host /etc/nsswitch.conf
hosts: files dns
Run Code Online (Sandbox Code Playgroud)
/etc/resolv.conf,我一致地转换了域名:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 172.16.1.1
nameserver 172.16.1.5
search subdomain.domain1.com domain1.com domain2 domain3.com domain2.ccTLD domain3.net dev.domain1.com sdk.dev.domain1.com
Run Code Online (Sandbox Code Playgroud)
...以及完整的/etc/nsswitch.conf:
$ cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat
group: compat
shadow: compat
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
Run Code Online (Sandbox Code Playgroud)
... 和/etc/network/interfaces,这是resolv.conf12.04 中的源代码:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 172.16.1.234
netmask 255.255.0.0
gateway 172.16.255.254
dns-nameservers 172.16.1.1 172.16.1.5
dns-search domain1.com. domain2. domain3.com. domain2.ccTLD. domain3.net. dev.domain1.com. sdk.dev.domain1.com. subdomain.domain1.com.
dns-domain subdomain.domain1.com.
Run Code Online (Sandbox Code Playgroud)
注意:域名的转换是用 完成的sed,所以各个复制文件之间是一致的。
没有~/.ssh/config,但这里是全局的 ( /etc/ssh/ssh_config),为简洁起见缩小了:
$ grep -v '^#' /etc/ssh/ssh_config |grep -v '^[[:space:]]*$'
Host *
SendEnv LANG LC_*
HashKnownHosts yes
GSSAPIAuthentication yes
GSSAPIDelegateCredentials no
Run Code Online (Sandbox Code Playgroud)
$ mtr pangolin
Name or service not known: Success
Run Code Online (Sandbox Code Playgroud)
jdt*_*ood 12
而ssh其他程序,例如ping使用 glibc 解析器查找主机名(在本例中为“穿山甲”),host则直接在 DNS 中查找名称,绕过 glibc 解析器。这就是区别。
但是,鉴于 glibc 解析器在您的机器上配置为 try dnsafter files,我无法解释解析器在host成功的地方失败的原因。
尝试与glibc的解析,可以使用getent hosts ...代替host ...。
当 dnsmasq 用作本地转发名称服务器(https://bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/998712)之前,我已经看到过这种行为,但您没有使用这样的本地名称服务器;但也许那里和这里的问题不在 dnsmasq 中,而在 glibc 解析器中。
小智 10
您的 ssh 可能会尝试解析 IP6 并超时。如果您不使用 IP6,请尝试/etc/ssh/ssh_config通过将 AddressFamily 从 更改为any来禁用 IP6 inet。
小智 5
我偶然在 2 个名称服务器行之前放置了一个域输入行,从而出现了此错误。nslookup 起作用了。wget 工作了。ssh、scp、rsync 失败。
将域移至以下名称服务器并保存已修复的 resolv.conf。对我来说,没有什么是必要的。
| 归档时间: |
|
| 查看次数: |
35255 次 |
| 最近记录: |