编辑 (从我下面的评论中复制而来):

编辑 (从我下面的评论中复制而来):

(看编辑已添加到结尾,关于 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,我不知道,这需要诊断。请执行以下操作:

  1. 发布的内容/etc/hosts/etc/resolv.conf /etc/nsswitch.conf
  2. 发布 的内容${HOME}/.ssh/config。请尽量少删除(出于隐私问题)。
  3. 重命名config并尝试ssh-ing。发布结果。
  4. 尝试不使用 进行连接.local,而是同时使用 IP 和服务器名称。发布结果。
  5. 指定您的网络配置... 1) 连接机器位于何处? 2) DNS 是哪个?
  6. 尝试一下host hostname_of_ubuntu_comp。发布结果。
  7. 进一步调试ssh -vvv ...。发布结果。
  8. netstat -plunt | grep 22在服务器中发布输出。
  9. systemctl status ssh在服务器中发布输出。

有关的

  1. “.local” 起什么作用?
  2. https://serverfault.com/questions/831747/why-is-ssh-not-resolving-this-hostname/831769
  3. https://stackoverflow.com/questions/20252294/ssh-could-not-resolve-hostname-hostname-nodename-nor-servname-provided-or-n
  4. 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

相关内容