sftp gibt einen Fehler aus: "Empfangene Nachricht zu lang" und was ist der Grund?

26

Ich konnte sftpgestern eine RHEL 5.4 Box (RedHat) machen und heute kann ich nicht.

Die Nachricht ist "Received message too long 778199411", und nach einigen Nachforschungen lag es daran, dass meine RHEL-Box .bashrceine Leitung hat echo "running .bashrc"- oder überhaupt etwas wiedergibt, denke ich.

Warum wirkt sich das Ausdrucken einer Zeile dann aus sftp? Es kam mir ein bisschen wie ein Designproblem vor, als ich .bashrcin anderen Situationen wie Anmelden oder Drucken einer Zeile in einem Werk arbeitete. sshEs ist schwierig, herauszufinden , wann ein sftpFehler aus einem so seltsamen Grund auftritt.

Die Frage ist also, warum das Ausdrucken einer Zeile einen solchen Fehler verursacht und was ist, wenn wir noch etwas ausdrucken möchten .bashrc? (hauptsächlich, um zu sehen, wann diese Datei bezogen / ausgeführt wird).

Nopole
quelle

Antworten:

26

Dies ist ein seit langem bestehendes Problem. Ich fand es vor zehn Jahren, als ich zum ersten Mal kommerzielles SSH bei der Arbeit und Open-SSH zu Hause mischen musste. Ich bin heute erneut darauf gestoßen und habe diesen Beitrag gefunden.

Wenn ich nach "sftp / scp schlägt fehl, aber ssh ist in Ordnung" gesucht hätte, wäre ich früher an die Lösung erinnert worden!

Einfach gesagt, .bashrc und .bash_profile etc müssen still sein oder sie stören das sftp / scp-Verbindungsprotokoll.

Siehe die open-SSH FAQ:

2.9 - sftp / scp schlägt bei der Verbindung fehl, aber ssh ist OK.

Peter Scott
quelle
Selbstaktualisierende Shell-Dienstprogramme sind ein guter Schuldiger für dieses Problem. Für mich war es oft Ruby Version Manager, der Jenkins 'Deployment-over-SSH störte.
Eric P.
Vielen Dank dafür, dass das Entfernen einiger Debugging-Echo-Anweisungen, die ich in meinem bashrc und bash_profile hatte, dies für mich gelöst hat.
SgtPooki
3
Falsch .bashrc muss still sein, .bash_profile kann ohne Probleme wiedergegeben werden.
Kubanczyk
2
Für alle, die hier landen: Wie in serverfault.com/a/630714 vorgeschlagen , können Sie ssh yourhost /usr/bin/truedie Ausgabe Ihres SSH prüfen . In meinem Fall habe ich festgestellt, dass ein Befehl in ~ / .bashrc anfing, Fehler zu erzeugen.
Yuval Atzmon
16

Zumindest für SFTP kann dies mit Hilfe des internal-sftpSubsystems behoben werden , da dieses nicht .bashrcoder nicht liest /etc/motd.

Ändern Sie einfach die /etc/ssh/sshd_configDatei und das SFTP-Subsystem:

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

Und der Fehler ist weg.

Kenneth
quelle
Ich mag dieses .. frage mich nur, ob dies irgendwelche Auswirkungen auf die Sicherheit hat?
RoyM
internal-sftpist, IMO, eine bessere Möglichkeit, SFTP-Unterstützung anzubieten. Sie können diesen verwandten Beitrag sehen: serverfault.com/questions/660160/…
Kenneth
Nach Ihrem Änderungsvorschlag für sshd_config habe ich sshd und sftp getötet (nicht sicher, ob es einen Dämon gab). Beim ersten Mal wurde die empfangene Nachricht als zu lang eingestuft, aber trotzdem angemeldet. Dann zurück zum selben Problem
clearlight 23.10.17
2

Jede Antwort, die ich irgendwo darauf gesehen habe, besagt, dass es sich um zu viel gedruckte Ausgabe über /etc/motdoder .bashrcusw. handelt. Nicht immer wahr. Wenn Sie ein Konto mit Nein haben .bashrc, /etc/motdist das leer, und die Standardeinstellung .bashrcist minimal, ohne gedruckte Ausgabe. SIE KÖNNEN NOCH das Problem haben. Wenn Sie ein Benutzerkonto mit einer Shell von haben /sbin/nologinoder /bin/falsedieser Fehler weiterhin auftritt.

Wieso würdest du das machen??? Wenn Sie jemandem im Root-Gefängnis sftpZugriff gewähren möchten, geschieht dies ohne Secure-Shell-Zugriff.

Umgehen: Erlauben Sie sshund setzen Sie sie auch in ein Wurzelgefängnis. Dies ist ein Problem, das angegangen werden muss ssh, es wird viel zu lange auf sich warten lassen.

TekOps
quelle
Ich hatte dieses Problem genau wegen der zu langen benutzerdefinierten Ausgabe in meinem .bashrc (ich habe dort screenfetch). Aber ich versuche immer noch herauszufinden, wie ich das ignorieren kann
vladkras
Ja, das könnte der Fall sein. Sie müssen ssh ändern. In unserem Fall war es ein Problem mit der Shell. Wir haben tatsächlich einen SFTP-Client speziell für Root-Jail verwendet, mussten also nicht alles Root-Jail-Zeug erledigen.
TekOps
Der Punkt ist, dass ich meine .bashrc nicht ändern möchte. Ich möchte mit einer beliebigen Länge der ersten Nachricht eine Verbindung zum Server herstellen. Also muss ich wahrscheinlich die Einstellungen meiner IDE ändern
vladkras
2

Setzen Sie einfach folgendes in ~ / .bashrc auf den Benutzernamen der ID auf der entfernten Maschine, wenn diese ID bash verwendet

# If not running interactively, don't do anything and return early
[[ $- == *i* ]] || return  

Das beendet einfach vorzeitig die ~ / .bashrc-Datei, anstatt die gesamte Datei auszulesen. Dadurch wird die .bashrc-Datei stillgelegt, wenn Sie sich nicht bei dieser ID anmelden und nur scp oder sftp mit diesem Benutzernamen als Remote-ID ausführen. Um @Peter Scott in einer anderen Antwort zu zitieren: "Einfach gesagt, .bashrc und .bash_profile usw. müssen still sein oder sie stören das sftp / scp-Verbindungsprotokoll."

Wenn diese entfernte ID zsh verwendet, setzen Sie alternativ Folgendes oben auf ~ / .zshrc

# If not running interactively, don't do anything and return early
[[ -o interactive ]] || exit 0

Wenn die Shell auf Ihrem Remotecomputer ~ / .bashrc nicht verwendet, nehmen Sie die obigen Änderungen in der Datei ~ / .bashrc_profile oder ~ / .profile oder ähnlichem vor, damit sie zu Ihrer Shell auf dieser Remotebox passen

Scott Stensland
quelle
1

Es kann noch einen Grund geben. Auf RHEL 6 mit openssh-5.3p1-122.el6.x86_64 haben wir festgestellt, dass es sich falsch verhält, wenn LOCALE auf "C" bleibt. Bei Änderung mit:

export LC_ALL="en_US.UTF-8"

Dann verhält sich sftp richtig. In der vorherigen Version von openssh-5.3p1-118 haben wir ein solches Verhalten nicht erlebt, daher handelt es sich wahrscheinlich um einen kleineren Fehler in diesem Build.

Jaroslav Kucera
quelle
1
Dieser scheinbar seltsame Vorschlag war das, was für meine Situation funktionierte. Vielen Dank!
jwd630
0

In meinem Fall musste ich Ubuntus Willkommensnachricht deaktivieren, damit es funktioniert.

Walty Yeung
quelle