(看编辑已添加到结尾,关于 avahi 内容)
它只是这样做:
> ssh -v [ubuntu_comp_hostname].local
=>
OpenSSH_8.2p1, LibreSSL 3.0.2
debug1: Reading configuration data /home/o1/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Authenticator provider $SSH_SK_PROVIDER did not resolve; disabling
ssh: Could not resolve hostname [ubuntu_comp_hostname].local: Name or service not known
(例如,在重新启动或将其中一台计算机从睡眠状态唤醒后,这种情况都没有发生。它本来在工作,我起床几分钟去喝茶,回来后,它突然不再工作了。)
我仍然可以通过使用知识产权ubuntu 计算机的
(
即代替[ubuntu_comp_hostname].local
)
——这是我通过运行此命令获得的 IP:(
ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'
我从某个我忘记的地方复制了它,并且让它在别名中挂了一段时间)
)
我仍然可以 ssh 进入其他电脑从ubuntu 计算机,使用另一台计算机的主机名。
令我非常困惑的是,
我在 ubuntu 计算机上运行 synergy 客户端,
客户端和服务器使用两台计算机的主机名进行连接,
并且那仍然运行良好
(我刚刚在两台计算机上关闭并重新启动了协同作用进行检查,是的,它重新连接正常。)
我不知道:我该从哪里开始尝试调试这个问题?
编辑 (从我下面的评论中复制而来):
我刚刚尝试过ps -eo cmd|grep avahi
,发现(除了avahi-daemon: chroot helper
)
这个:
avahi-daemon: running [ubuntu_comp_hostname-2.local]
。 (即,主机名末尾
有这个额外的内容,但没有明显的原因)。 ((尝试连接-2
ssh ubuntu_comp_hostname-2.local
做工作。))
我对这些东西极其无知,但我猜测......
avahi 崩溃或者重启了或者发生其他问题?
然后它尝试以普通方式运行
[ubuntu_comp_hostname.local]
,
但仍然处于无效状态或其他状态,
因此它会自动将 附加-2
到实际主机名的末尾?
是的,sudo service avahi-daemon restart
成功了
——也就是说,不再有-2
,
一切都按照预期再次通过 hostname.local 连接
(尽管我~/.ssh/config
按照建议删除了我添加的文件作为解决方法(之前没有这样的文件))
不过,我仍然想知道是什么导致了这个问题,
以及如何防止它再次发生
(或者至少让它自动修复?)
答案1
编辑
问题原因
至于为什么服务器名称没有正确解析到IP,我不知道,这需要诊断。请执行以下操作:
- 发布的内容
/etc/hosts
。/etc/resolv.conf
/etc/nsswitch.conf
- 发布 的内容
${HOME}/.ssh/config
。请尽量少删除(出于隐私问题)。 - 重命名
config
并尝试ssh
-ing。发布结果。 - 尝试不使用 进行连接
.local
,而是同时使用 IP 和服务器名称。发布结果。 - 指定您的网络配置... 1) 连接机器位于何处? 2) DNS 是哪个?
- 尝试一下
host hostname_of_ubuntu_comp
。发布结果。 - 进一步调试
ssh -vvv ...
。发布结果。 netstat -plunt | grep 22
在服务器中发布输出。systemctl status ssh
在服务器中发布输出。
有关的:
- “.local” 起什么作用?
- https://serverfault.com/questions/831747/why-is-ssh-not-resolving-this-hostname/831769
- https://stackoverflow.com/questions/20252294/ssh-could-not-resolve-hostname-hostname-nodename-nor-servname-provided-or-n
- https://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch12_01.htm
让它发挥作用的方法
您说可以使用 IP ssh 进入服务器。假设您用来连接的命令是
$ ssh [email protected]
然后,确保${HOME}/.ssh/config
您的客户端有以下几行(最后两行很方便,但可选)
Host server_user
HostName 10.20.10.10
User user_at_server
ServerAliveInterval 30
ForwardX11 yes
然后确保分配了正确的属性:
$ chmod 0664 ${HOME}/.ssh/config
$ chmod 0700 ${HOME}/.ssh
你现在可以
$ ssh server_user
答案2
使用 .local 作为您的 lan 域可能会有问题,因为它是为多播 DNS (mDNS) 和 zeroconf 保留的。最近的 Linux 更新强制执行此操作。您可以安全地将其更改为 .lan,但您必须更新所有脚本。
https://en.wikipedia.org/wiki/.local#:~:text=local%20is%20a%20special%2Duse,localhost。