(Ich habe herausgefunden, dass dies im Zusammenhang mit steht nscd
. Bitte lesen Sie den unteren Teil der Frage.)
Ich versuche, über meinen Laptop eine Verbindung zu einem kopflosen Server herzustellen. Sie teilen sich eine kabelgebundene Verbindung über einen Linksys-WLAN-Router und einen TP-Link-Ethernet-Switch. Ich verwende Arch Linux auf beiden Rechnern und verwende ein ziemlich standardmäßiges Systemd-Setup mit dhcpcd für die Netzwerkkonfiguration.
Nach einem kürzlichen System-Upgrade auf dem Laptop trat beim Versuch, ssh an den Server zu senden (nennen wir es "myserver"), der folgende Fehler auf:
$ ssh -v -v -F /dev/null myserver
OpenSSH_7.7p1, OpenSSL 1.1.0h 27 Mar 2018
debug1: Reading configuration data /dev/null
debug2: resolving "myserver" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to myserver [fe80::9cd8:b045:5974:c5cf] port 22.
debug1: connect to address fe80::9cd8:b045:5974:c5cf port 22: Invalid argument
ssh: connect to host myserver port 22: Invalid argument
Wenn Sie denselben Befehl mit strace
ausführen, wird der Fehler wie folgt angezeigt connect
:
connect(3, {sa_family=AF_INET6, sin6_port=htons(22), inet_pton(AF_INET6, "fe80::9cd8:b045:5974:c5cf", &sin6_addr), sin6_flowinfo=htonl(0), sin6_scope_id=0}, 28) = -1 EINVAL (Invalid argument)
Funktioniert jedoch ping myserver
gut:
$ ping myserver
PING myserver(myserver (fe80::9cd8:b045:5974:c5cf)) 56 data bytes
64 bytes from myserver (fe80::9cd8:b045:5974:c5cf%en0): icmp_seq=1 ttl=64 time=0.533 ms
64 bytes from myserver (fe80::9cd8:b045:5974:c5cf%en0): icmp_seq=2 ttl=64 time=0.549 ms
Normalerweise habe ich lokale named
DNS-Weiterleitungsabfragen, aber der Fehler bleibt bestehen, wenn ich wieder direkt den DNS-Server des Routers verwende:
$ sudo cat /etc/resolv.conf
# Generated by resolvconf
nameserver 192.168.1.1
Der Fehler tritt nur sporadisch auf: Alle paar Minuten kann ich eine erfolgreiche Verbindung herstellen. Wenn ich erfolgreich eine Verbindung herstellen kann, connect
wird eine IPv4-Adresse verwendet:
connect(3, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("192.168.1.149")}, 16) = 0
Der host
Befehl zeigt jedoch die gleiche IPv4-Adresse an, unabhängig davon, ob die Verbindung funktioniert oder unterbrochen ist:
$ host myserver
myserver has address 192.168.1.149
Nachdem ich diese Frage gelesen hatte , überlegte ich mir, die Schnittstelle manuell festzulegen ( ssh -v -v -F /dev/null -B en0 myserver
). Dies beseitigt den Fehler, wenn er auftritt, ist jedoch keine dauerhafte Lösung für mich und erklärt nicht, warum der Fehler plötzlich auftrat.
Ich habe eine while
Schleife in meiner Shell verwendet, um die Zeit bis zur nächsten Sekunde zu bestimmen, in der ssh
von "arbeiten" zu "nicht arbeiten" gewechselt wird, und ich konnte diese Ereignisse mit nichts in der Ausgabe von "korrelieren" journalctl
, einschließlich der dhcpcd
Nachrichten.
Ich hatte dies ursprünglich auf Network Engineering gepostet, wo sich herausstellt, dass die Host-Konfiguration nicht zum Thema gehört. Auf dieser Seite hatte der Benutzer Ricky Beam eine Teilantwort gepostet:
Was auch immer die Auflösung von Hostnamen bewirkt, gibt eine oder mehrere verbindungslokale IPv6-Adressen zurück, die für die ausgewählte Schnittstelle nicht gültig sind, dh "any". Link-lokale Adressen müssen die Schnittstelle angeben - z. fe80: ...: 1% eth0
Warum Sie eine Link-Local-Adresse erhalten, ist unbekannt. Vielleicht könnten Leute, die mit Arch Linux vertraut sind, weitere Hilfe leisten.
Update: Es scheint ein Problem mit dem nscd
"Name Service Cache Daemon" zu sein, das die Unterbrechung erklärt, die ich hatte (vermutlich aufgrund des Cache-Ablaufs). Es ist behoben mit:
sudo systemctl stop nscd.service
Wenn ich ncsd stoppe, ssh
kann die Verbindung über eine Link-Local-Adresse hergestellt werden. Diesmal gibt der connect
Aufruf jedoch auch meine primäre Schnittstelle "en0" an und dies ist erfolgreich:
connect(3, {sa_family=AF_INET6, sin6_port=htons(22), inet_pton(AF_INET6, "fe80::9cd8:b045:5974:c5cf", &sin6_addr), sin6_flowinfo=htonl(0), sin6_scope_id=if_nametoindex("en0")}, 28) = 0
write(2, "debug1: Connection established.\r"..., 33) = 33
Ich vermute, die verbleibende Frage (die ich separat stellen könnte) lautet: Ist dies ein Fehler in nscd und sollte ich nscd überhaupt verwenden?
nscd
. Und jetzt bekomme ich noch linklokale Adressen für lokale Hosts, ssh
funktioniert aber . Ich habe die Frage aktualisiert ... Weitere Einblicke sind willkommen.