tha*_*Guy 10 ssh lubuntu networking avahi
解决:确保安装了libnss-mdns!
我在使用 .local 主机名从上网本到桌面使用 SSH 时遇到问题。每隔一段时间,我都必须重置我使用的路由器,这会重置它分配给我的设备的地址,所以不久前我设置了 Avahi 来解决这个问题*。/etc/avahi/services/ssh.service 文件是从文档中复制的标准文件:
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<!-- See avahi.service(5) for more information about this configuration file -->
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_ssh._tcp</type>
<port>22</port>
</service>
</service-group>
Run Code Online (Sandbox Code Playgroud)
这曾经工作正常,但现在由于某种原因,当我尝试从上网本 ssh 到我的桌面时,我收到以下错误消息(注意我在此输出中更改了我的电脑的主机名):
user@netbook>> ssh pc.local -vvv
OpenSSH_6.2p2 Ubuntu-6ubuntu0.3, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /home/username/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
ssh: Could not resolve hostname pc.local: Name or service not known
Run Code Online (Sandbox Code Playgroud)
当我手动输入 IP 地址时,我可以从上网本 ssh 到我的 PC,并且当我正确设置 /etc/hosts 时(因此我 PC 上的守护程序工作正常),它只会在我尝试时停止工作使用 .local 地址。即使使用 .local 主机名,SSH 在另一个方向(PC->上网本)也能正常工作。Avahi 似乎也工作正常:
user@netbook>> avahi-browse -a -t+
+ wlan0 IPv6 netbook SSH Remote Terminal local
+ wlan0 IPv6 netbook [<MAC address>] Workstation local
+ wlan0 IPv6 netbook Remote Disk Management local
+ wlan0 IPv4 netbook SSH Remote Terminal local
+ wlan0 IPv4 netbook [<MAC address>] Workstation local
+ wlan0 IPv4 netbook Remote Disk Management local
+ wlan0 IPv4 pc SSH Remote Terminal local
+ wlan0 IPv4 pc [<MAC address>] Workstation local
+ wlan0 IPv4 pc Remote Disk Management local
+ wlan0 IPv6 pc SSH Remote Terminal local
+ wlan0 IPv6 pc [<MAC address>] Workstation local
+ wlan0 IPv6 pc Remote Disk Management local
Run Code Online (Sandbox Code Playgroud)
上网本运行的是 Lubuntu 13.10;请注意,我最近确实改用了 Lubuntu,我只记得在 Lubuntu 上看到过这个错误,而在普通的 Ubuntu 上没有。我的桌面运行的是 Ubuntu 13.10。
任何帮助,将不胜感激!
*我知道可以将我的路由器设置为永久为两个设备提供设置地址,如果我无法解决此问题,我会这样做,但我更愿意尝试解决此问题而不是解决它。
ETA:使用 .local 主机名从上网本 Ping PC 不起作用(未知主机)。
编辑2:内容 /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 mdns4_minimal dns [NOTFOUND=return] mdns4
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
Run Code Online (Sandbox Code Playgroud)
use*_*.dz 12
嗯,*.local都没有解决。
所以在客户端机器(笔记本)上
安装 avahi-dnsconfd
sudo apt-get install avahi-daemon avahi-dnsconfd avahi-discover avahi-utils
Run Code Online (Sandbox Code Playgroud)
avahi-dnsconfd听取发布并将它们传递给resolvconf.
安装libnss-mdns (此库丢失,在这种情况下安装它解决了问题)
sudo apt-get install libnss-mdns
Run Code Online (Sandbox Code Playgroud)
nss-mdns 是 GNU C 库 (glibc) 的 GNU 名称服务切换 (NSS) 功能的插件,通过多播 DNS(使用 Zeroconf,又名 Apple Bonjour / Apple Rendezvous)提供主机名解析,有效地允许通用 Unix 进行名称解析临时 mDNS 域 .local 中的 /Linux 程序
查看 /etc/nsswitch.conf
hosts: files wins mdns4_minimal dns [NOTFOUND=return] mdns4
Run Code Online (Sandbox Code Playgroud)
如果您有一个配置了 resolve 的 DNS 服务器,它应该有mdns4_minimal或mdns4之前[NOTFOUND=return]和之前。dns*.local
wins如果您不使用 winbind/samba 来解析 Windows 共享主机名,请删除。
重启
客户端机器(笔记本)
检查avahi-dnsconfd服务状态
$ service avahi-dnsconfd status
avahi-dnsconfd start/running, process 1548
Run Code Online (Sandbox Code Playgroud)运行avahi-discover,你的桌面应该列在 IPv4→local→Workstation
屏幕截图中的示例mx5是我的 PC,其中salah-Aspire-5738另一台机器。

查看 Avahi 是否可以解析主机名
avahi-resolve -4 --name yourdesktop.local
Run Code Online (Sandbox Code Playgroud)ping测试
$ ping salah-Aspire-5738.local
PING salah-Aspire-5738.local (192.168.1.3) 56(84) bytes of data.
64 bytes from salah-Aspire-5738.local (192.168.1.3): icmp_seq=1 ttl=64 time=2.69 ms
Run Code Online (Sandbox Code Playgroud)服务器机器(桌面),以防avahi-discover在客户端机器中没有列出服务器条目。
确认avahi-daemon已安装
sudo apt-get install avahi-daemon avahi-dnsconfd avahi-discover avahi-utils
Run Code Online (Sandbox Code Playgroud)
avahi-daemon 提供服务发布。
检查其服务状态
$ service avahi-daemon status
avahi-daemon start/running, process 1517
Run Code Online (Sandbox Code Playgroud)默认avahi发布_workstation._tcp服务。检查使用avahi-discover本地,如果未列出尝试启用它/etc/avahi/avahi-daemon.conf(删除#)
publish-workstation=yes
Run Code Online (Sandbox Code Playgroud)
然后重启守护进程:
sudo service avahi-daemon restart
Run Code Online (Sandbox Code Playgroud)
再检查一遍。