Wenn ich mich ssh
auf einem meiner Server anmelde, scheint es sich anzumelden, hängt sich dann aber auf, bevor ich die Eingabeaufforderung erhalte ( message debug2: shell request accepted on channel 0 is the last log entry
).
Obwohl die seltsame Sache ssh -t "/bin/bash"
funktioniert, wenn ssh
nicht.
Was ich bisher herausgefunden habe
- Ich kann mich normalerweise von Servern am selben geografischen Standort aus problemlos anmelden
- Wenn ich
ssh -t '/bin/bash'
mich von JEDEM Ort aus perfekt einloggen kann. - Wenn ich
rsync
an den Server gewöhne, scheint es zu funktionieren und sperrt dann - Wenn ich
rsync
vom Server verwende, funktioniert es problemlos
Was ich probiert habe
- Entfernen oder Ändern aller Anmeldeoptionen
.profile
,.bashrc /etc/profile
- Ändern des
ssh_config
und / odersshd_config
eines von einem identischen Server, der gut funktioniert - Ich habe das Routing überprüft
- Ich habe einen Netzwerkexperten vergeblich untersuchen lassen
tcpdump
(obwohl es anscheinend viele Neuübertragungen gibt)
Mir fällt wirklich nichts anderes ein
Abgesehen von einem zwielichtigen Netzwerkkartentreiber / Firmware.
match
Aussagen insshd_config
? Läuft nur eine Instanzsshd
?.ssh/authorized_keys
wiecommand=…
? Haben Sie alle Firewall-Regeln durchgesehen, um festzustellen, ob versehentlich einige SSH-Pakete blockiert wurden?/etc/profile.d/*
oder/etc/bashrc
Dateien vor.Antworten:
Das kann an einem Problem im Profil liegen.
Wenn Sie sich mit
ssh -t /bin/bash
Ihrer Shell verbinden, wird sich weder 'einloggen',/etc/profile
noch die~/.profile
und~/.bashrc
...Versetzen Sie die Shell nach dem Herstellen der Verbindung in den Debug-Modus und geben Sie für jede Datei einen Quellcode ein, um festzustellen, was darin blockiert:
BEARBEITEN
Beachten Sie, dass ich mich geirrt habe. Die .bashrc-Datei wird von jeder interaktiven Shell bezogen (daher ist hier nur das Profil, die profile.d-Dateien von Bedeutung).
Versuchen Sie, die Liste der verschiedenen Phasen des Verbindungsprozesses zu erstellen. Etwas wie das
1) ssh verbindet (config, ...)
2) login (PAM, tty, wtmp, ...)
3) Starten der Shell (profile, home dir access, ...)
Zum Überprüfen von (1) können Sie den sshd-Daemon im Debug-Modus starten. Dazu müssen Sie einen anderen sshd starten und einen dedizierten Port abhören (nicht an Port 22, daher müssen Sie den regulären sshd-Daemon nicht anhalten).
Das sshd akzeptiert nur eine Verbindung und geht nicht in den Hintergrund. Öffnen Sie ein anderes Terminal und stellen Sie eine Verbindung zu dieser SSH-Sitzung her.
Sie können die Nachrichten, die Sie erhalten, mit denen eines anderen Servers der gleichen Marke vergleichen. Dann werden Sie wissen, ob das Problem auf der SSH-Seite liegt oder nicht.
(-ddd und -vvv sind die maximale Debugstufe, das können Sie einstellen)
Ich habe diesen Link , viel detaillierter.
quelle
Die Antwort auf mein Problem Es stellte sich heraus, dass es sich um ein Netzwerkproblem handelte. Ich fand schließlich heraus, dass das Problem behoben wurde, indem die MTU aller Netzwerkkarten ein wenig gesenkt wurde.
Höchstwahrscheinlich ist etwas für dieses Netzwerk falsch konfiguriert, aber das kann ich jetzt beweisen und dem Netzwerkteam übergeben (das mir immer wieder mitteilte, dass es sich um ein Serverproblem handelte).
Beachten Sie jedoch, dass dies ein letzter Ausweg ist. Die Besonderheit, die ich hatte, war, dass der SSH-Server über dasselbe Subnetz arbeitete, aber nicht außerhalb, und dass SSH-t '/ bin / bash' von überall aus funktionierte.
Ich hatte auch rsyncs, die gut anfingen würden, aber irgendwann einfach hängen oder die Verbindung trennen.
Wenn Sie sich also diese Antwort ansehen, probieren Sie zuerst die anderen oben aus, und NUR wenn Sie Seltsamkeiten wie meine bekommen, hilft dies wahrscheinlich.
Also danke für all die Hilfe. Ich habe alles ausprobiert, und es hat mir eine Menge beigebracht, und ich habe bestätigt, dass es nichts mit dem Server zu tun hat (was alles ist, was ich mir erhofft hatte).
Vielen Dank an alle, die mitgeholfen haben
quelle
Wenn Sie dies tun
ssh some_user@some_host /bin/bash
, starten Sie die Shell/etc/passwd
von some_user (wie in some_host definiert ) und führen dann den angegebenen Befehl/bin/bash
in dieser Shell aus.Jetzt wird die Shell von some_user (nehmen wir an, es ist auch so
bash
) nicht interaktiv gestartet (sondern führt stattdessen den angegebenen Befehl aus). Es wird also keine Pty (ein Pseudoterminal ) zugewiesen, und das bedeutet, dass der ausgegebene Befehl keine Pty verwenden kann, sodass er nicht interaktiv gestartet wird.In diesem Beispiel wird der angeforderte
/bin/bash
Befehl gestartet, scheint jedoch zu hängen.Sie können dies beheben, indem Sie
ssh
eine Pty erstellen, sodass eine für die Shell und ihre untergeordneten Prozesse verfügbar ist. Das ist was-t
tut.Sie können dies auch beheben, indem Sie den Befehl zum Erstellen einer Pty zwingen. Für
bash
, tun Sie dies ein , indem-i
Argument. Die folgende Befehlszeile sollte ebenfalls funktionieren:Beachten Sie jedoch, dass in diesem letzteren Fall die Shell nicht zugreifen kann
/dev/tty
und dies zu einer Warnung führt:Die Gründe hierfür werden hier erläutert . Dies kann ein Problem sein oder auch nicht, je nachdem, was Sie in der Shell vorhaben, aber
ssh -t
wahrscheinlich ist die Verwendung die bessere Option.(Beachten Sie, dass Sie nur
bash
den Befehl übergeben können, da er sich ohnehin auf dem Pfad der Standardshell des Benutzers befinden sollte.)quelle
Ich habe das gleiche Problem, als ich kürzlich eine verschachtelte Virtualisierungsplattform verwendet habe.
Es funktioniert, nachdem die MTU auf dem Quell- oder Zielserver von 1500 auf 1400 reduziert wurde.
quelle