Проблемы с использованием SSH и Avahi

10

Решено: убедитесь, что libnss-mdns установлен!

У меня проблемы с использованием SSH с моего нетбука на рабочий стол с использованием имени хоста .local. Время от времени мне приходится сбрасывать используемый маршрутизатор, который сбрасывает адреса, которые он выдает моим устройствам, поэтому некоторое время назад я настроил 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>

Раньше это работало нормально, но теперь по какой-то причине, когда я пытаюсь выполнить 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

Я могу ssh с моего нетбука на мой ПК, когда я вручную ввожу IP-адрес, и когда я правильно настроил / etc / hosts (так, что демон на моем ПК работает нормально), он перестает работать, только когда я пытаюсь используйте адрес .local. Работа SSH в другом направлении (ПК-> нетбук) работает нормально, даже при использовании имени хоста .local. 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

Нетбук работает под управлением Lubuntu 13.10; обратите внимание, что я недавно перешел на Lubuntu, и я помню только то, что видел эту ошибку с Lubuntu, а не с простой Ubuntu. Мой рабочий стол работает под управлением Ubuntu 13.10.

Любая помощь будет оценена!

* Я знаю, что могу настроить мой маршрутизатор на постоянную выдачу заданных адресов обоим устройствам, и я сделаю это, если не смогу решить эту проблему, но я бы предпочел попытаться исправить это, а не обойти это.

ETA: Проверка связи компьютера с нетбуком с именем хоста .local не работает (неизвестный хост).

Изменить 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
thatSeniorGuy
источник
Я давно не пользовался ни DHCP, ни Avahi, но разве не так просто ssh user@hostname:/folder?
Алекс
Пинг-тест прошел ping pc.local?
user.dz
1
@Alex: В идеале это то, что я хотел бы сделать, но, как я часто отмечал в посте, мне приходится переустанавливать маршрутизатор, который сбрасывает адреса, которые он выдает, что означает, что я буду менять / etc / hosts файлы регулярно, поэтому я настроил Avahi.
thatSeniorGuy
1
@Sneetsher: только что попробовал, и это не так: "ping: неизвестный хост pc.local".
thatSeniorGuy
Запуск strace ssh user@fooтакже покажет, что ssh связывается с avahi-daemon с просьбой разрешить foo, что истекло ... В моем случае изменилось /etc/nsswitch.conf: с " hosts: files mdns4_minimal [NOTFOUND=return] dns" на " hosts: files dns mdns4_minimal". Не уверен, почему демон avahi, как предполагается, НЕ запрашивает DNS-серверы, возможно, он должен что-то делать с несовместимостью между многоадресным DNS и DNS в локальной сети (см. Также: TLD .local ... в .localлюбом случае это плохая практика)
Дэвид Тонхофер

Ответы:

11

Ну, *.localне решены.

Так на клиентской машине (ноутбуке)

  1. устанавливать avahi-dnsconfd

    sudo apt-get install avahi-daemon avahi-dnsconfd avahi-discover avahi-utils
    

    avahi-dnsconfdслушает публикации и передает их resolvconf.

  2. Установить libnss-mdns (эта библиотека отсутствовала, ее установка устранила проблему в данном случае)

    sudo apt-get install libnss-mdns
    

    nss-mdns - это плагин для функциональности GNU Name Service Switch (NSS) библиотеки GNU C (glibc), обеспечивающий разрешение имен хостов через Multicast DNS (с использованием Zeroconf, он же Apple Bonjour / Apple Rendezvous), эффективно разрешающий разрешение имен с помощью общего Unix / Программы для Linux в специальном домене mDNS .local

  3. Проверьте /etc/nsswitch.conf

    hosts:     files wins mdns4_minimal dns [NOTFOUND=return] mdns4
    

    Должно быть mdns4_minimalили mdns4до, [NOTFOUND=return]и до, dnsесли у вас есть DNS-сервер, который настроил разрешение *.local.

    Удалите, winsесли вы не используете winbind / samba для разрешения имен хостов Windows.

  4. перезагружать


Отклоняющие намеки:

  • Клиентский компьютер (ноутбук)

    1. Проверьте avahi-dnsconfdстатус сервиса

      $ service avahi-dnsconfd status
      avahi-dnsconfd start/running, process 1548
      
    2. Запустите avahi-discover, ваш рабочий стол должен быть указан в IPv4 → локальный → рабочая станция

      Пример на скриншоте mx5- мой компьютер, на котором salah-Aspire-5738находится другая машина.

      введите описание изображения здесь

    3. Посмотрим, сможет ли Avahi разрешить имена хостов

      avahi-resolve -4 --name yourdesktop.local
      
    4. Пинг тест

      $ 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
      
  • Серверная машина (Desktop) , в случае, если avahi-discoverна клиентской машине не указана запись Сервера.

    1. Подтвердите, что avahi-daemonустановлено

      sudo apt-get install avahi-daemon avahi-dnsconfd avahi-discover avahi-utils
      

      avahi-daemon оказывать услуги издательского дела.

    2. Проверьте его сервисный статус

      $ service avahi-daemon status
      avahi-daemon start/running, process 1517
      
    3. По умолчанию avahiпубликуют _workstation._tcpсервис. проверить использование avahi-discoverлокально, если нет в списке попробуйте включить его /etc/avahi/avahi-daemon.conf(удалить #)

      publish-workstation=yes
      

      Затем перезапустите демон:

      sudo service avahi-daemon restart
      

      Проверить снова.

user.dz
источник
Не повезло, к сожалению. avahi-discoverи avahi-dnsconfdне были установлены на моем нетбуке или ПК, поэтому я установил их на обоих. Я также отредактирован , /etc/nsswitchчтобы выглядеть как образец вы предоставили (ранее только записи были файлы и DNS) , но как pingи до avahiсих пор дают ту же ошибку. Еще совет?
thatSeniorGuy
Ага, это очень сложно.
thatSeniorGuy
Удаление winsне помогло. avahi-dnsconf это работает на нетбуке (хотя я должен был использовать sudo service avahi-dnsconfdв список, в противном случае serviceбудет реагировать с неизвестной работой). avahi-discover(при запуске на моем нетбуке) выводит список рабочего стола (и правильно) как под заголовком «Рабочая станция», так и под заголовком «ssh». Тем не менее я все еще не могу пинговать или ssh на ПК, используя имена хостов .local. Я проверил демон на рабочем столе в любом случае, и avahi-daemon это работает. Есть идеи? (кстати, спасибо за все ваши советы, я ценю это)
thatSeniorGuy
@thatSeniorGuy, avahi-resolve -4 --name yourdesktop.local?
user.dz
1
Не был установлен Установил его, и все заработало !!!!!!!!! Спасибо большое за твою помощь! Может быть, добавить это в свой пост, чтобы другие могли видеть это немного проще?
thatSeniorGuy