Konfigurieren Sie Ihren Server so, dass er den internen sftp-Server verwendet, indem Sie die folgende Anweisung zu /etc/ssh/sshd_config
hinzufügen :
Subsystem sftp internal-sftp
Auf diese Weise wird die Benutzer-Shell nicht verwendet, um das sftp-Serverprogramm zu starten.
"Received message too long" bedeutet, dass Ihr SFTP-Client fehlerhafte Daten vom SFTP-Server erhalten hat. Der typische Grund ist, dass die Shell-Startskripte auf dem Server (.bashrc, .profile, .cshrc usw.) eine Ausgabe erzeugen und Ihr SFTP-Client versucht, diese Ausgabe als SFTP-Nachricht zu analysieren. Sie können dies überprüfen, indem Sie den folgenden Befehl ausführen:
ssh [email protected] 'echo hello'
Wenn dies eine andere Ausgabe als "Hallo" erzeugt, würde diese Ausgabe wahrscheinlich verhindern, dass SFTP oder SCP ordnungsgemäß funktionieren.
Wie in der Antwort von Salva können Sie dies vermeiden, indem Sie den SSH-Server so einstellen, dass er internal-sftp für SFTP-Sitzungen verwendet. Dadurch wird vermieden, dass Sie Ihre Shell für SFTP-Sitzungen starten. Dies hilft nicht bei SCP oder anderen Programmen wie git oder rsync, die über ssh laufen.
Die andere Möglichkeit, dies zu beheben, besteht darin, Ihre Shell-Startbefehle durchzugehen, herauszufinden, was die Ausgabe erzeugt, und zu verhindern, dass dies während nicht interaktiver SSH-Sitzungen geschieht. Ein Tipp ist, auf ein TTY zu testen, bevor Befehle ausgeführt werden, die eine Ausgabe erzeugen:
if [ -t 1 ]; then
# standard output is a TTY
...
fi