Problèmes avec ssh et Avahi

10

Résolu: assurez-vous que libnss-mdns est installé!

J'ai du mal à utiliser SSH depuis mon netbook sur mon bureau en utilisant un nom d'hôte .local. De temps en temps, je dois réinitialiser le routeur que j'utilise, ce qui réinitialise les adresses qu'il donne à mes appareils, donc il y a quelque temps, j'ai configuré Avahi pour contourner ce problème *. Le fichier /etc/avahi/services/ssh.service est le fichier standard copié à partir de la documentation:

<?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>

Cela fonctionnait bien, mais maintenant, pour une raison quelconque, lorsque j'essaie de passer de mon netbook à mon bureau, je reçois le message d'erreur suivant (notez que j'ai changé le nom d'hôte de mon PC dans cette sortie):

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

Je peux ssh depuis mon netbook vers mon PC lorsque je saisis l'adresse IP manuellement et que j'ai configuré correctement / etc / hosts (donc le démon sur mon PC fonctionne correctement), il ne fonctionne que lorsque j'essaie de utilisez l'adresse .local. SSH dans l'autre sens (PC-> netbook) fonctionne très bien, même lorsque vous utilisez un nom d'hôte .local. Avahi semble également fonctionner correctement:

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

Le netbook exécute Lubuntu 13.10; notez que j'ai changé pour Lubuntu récemment, et je me souviens seulement d'avoir vu cette erreur avec Lubuntu et pas avec Ubuntu. Mon bureau exécute Ubuntu 13.10.

Toute aide serait appréciée!

* Je suis conscient que je peux configurer mon routeur pour donner en permanence des adresses définies aux deux appareils, et je le ferai si je ne peux pas résoudre ce problème, mais je préfère essayer de résoudre ce problème plutôt que de le contourner.

ETA: exécuter une commande ping sur le PC à partir du netbook avec le nom d'hôte .local ne fonctionne pas (hôte inconnu).

Edit 2: Contenu de /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
la source
Je n'ai pas utilisé DHCP ni Avahi depuis un moment maintenant, mais ne pouvez-vous pas simplement ssh user@hostname:/folder?
Alex
Le test ping a-t-il réussi ping pc.local?
user.dz
1
@Alex: Idéalement, c'est ce que j'aimerais faire, mais comme je l'ai souligné dans la publication de temps en temps, je dois réinitialiser le routeur, ce qui réinitialise les adresses qu'il donne, ce qui signifie que je changerais / etc / hosts fichiers régulièrement, c'est pourquoi j'ai configuré Avahi.
thatSeniorGuy
1
@Sneetsher: Je viens de l'essayer, et ce n'est pas le cas: "ping: hôte inconnu pc.local".
thatSeniorGuy
L'exécution strace ssh user@foomontrera également que ssh contacte avahi-daemon avec la demande de résolution foo, ce qui arrive à expiration ... Dans mon cas, changé en /etc/nsswitch.conf: De " hosts: files mdns4_minimal [NOTFOUND=return] dns" à " hosts: files dns mdns4_minimal". Je ne sais pas pourquoi le démon avahi est censé ne PAS demander aux serveurs DNS, il peut avoir à faire quelque chose avec l'incompatibilité entre DNS multicast et DNS à la fois sur le LAN (voir aussi: .local TLD ... avoir une .localmauvaise pratique de toute façon)
David Tonhofer

Réponses:

11

Eh bien, *.localne sont pas résolus.

Donc sur la machine cliente (ordinateur portable)

  1. Installer avahi-dnsconfd

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

    avahi-dnsconfdécoute l'édition et les transmet resolvconf.

  2. Installer libnss-mdns (cette bibliothèque manquait, son installation a résolu le problème dans ce cas)

    sudo apt-get install libnss-mdns
    

    nss-mdns est un plugin pour la fonctionnalité GNU Name Service Switch (NSS) de la bibliothèque GNU C (glibc) fournissant une résolution de nom d'hôte via Multicast DNS (en utilisant Zeroconf, alias Apple Bonjour / Apple Rendezvous), permettant efficacement la résolution de nom par Unix commun / Programmes Linux dans le domaine mDNS ad-hoc .local

  3. Vérifier /etc/nsswitch.conf

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

    Il devrait avoir mdns4_minimalou mdns4avant [NOTFOUND=return]et avant dnssi vous avez un serveur DNS qui a configuré la résolution *.local.

    Supprimez winssi vous n'utilisez pas winbind / samba pour résoudre les noms d'hôte de partage Windows.

  4. Redémarrer


Conseils de débogage:

  • Machine client (ordinateur portable)

    1. Vérifier l' avahi-dnsconfdétat du service

      $ service avahi-dnsconfd status
      avahi-dnsconfd start/running, process 1548
      
    2. Exécuter avahi-discover, votre bureau doit être répertorié dans IPv4 → local → Workstation

      L'exemple en capture d'écran mx5est mon PC où se salah-Aspire-5738trouve une autre machine.

      entrez la description de l'image ici

    3. Voir si Avahi peut résoudre les noms d'hôtes

      avahi-resolve -4 --name yourdesktop.local
      
    4. Test 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
      
  • Machine serveur (bureau) , dans le cas où la avahi-discovermachine cliente n'a pas répertorié l'entrée serveur.

    1. Confirmez qu'il avahi-daemonest installé

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

      avahi-daemon fournir des services d'édition.

    2. Vérifiez son état de service

      $ service avahi-daemon status
      avahi-daemon start/running, process 1517
      
    3. Par défaut, service de avahipublication _workstation._tcp. vérifier en utilisant avahi-discoverlocalement, s'il n'est pas répertorié, essayez de l'activer dans /etc/avahi/avahi-daemon.conf(supprimer #)

      publish-workstation=yes
      

      Redémarrez ensuite le démon:

      sudo service avahi-daemon restart
      

      Revérifier.

user.dz
la source
Pas de chance malheureusement. avahi-discoveret avahi-dnsconfdn'ont pas été installés sur mon netbook ou PC, donc je les ai installés sur les deux. J'ai également édité /etc/nsswitchpour ressembler à l'exemple que vous avez fourni (auparavant, les seules entrées étaient des fichiers et des DNS), mais les deux pinget avahidonnent toujours la même erreur. Un autre conseil?
thatSeniorGuy
Arrgh, c'est extrêmement perplexe.
thatSeniorGuy
La suppression winsn'a pas aidé. avahi-dnsconf est en cours d'exécution sur le netbook (même si je devais l'utiliser sudo service avahi-dnsconfdpour le répertorier, sinon serviceje répondrais avec un travail inconnu). avahi-discover(lorsqu'il est exécuté sur mon netbook) ne liste le bureau (et correctement), à la fois sous le titre du poste de travail et la rubrique ssh. Pourtant je ne peux toujours pas cingler ou ssh dans le PC en utilisant des noms d'hôte .local. J'ai vérifié le démon sur le bureau de toute façon, et avahi-daemon est en cours d' exécution. Des idées? (btw, merci pour tous vos conseils, je l'apprécie)
thatSeniorGuy
@thatSeniorGuy, avahi-resolve -4 --name yourdesktop.local?
user.dz
1
N'a pas été installé. Je l'ai installé et ça a fonctionné !!!!!!!!! Je vous remercie beaucoup pour votre aide! Peut-être ajouter cela à votre message pour que les autres puissent le voir un peu plus facilement?
thatSeniorGuy