OS: Debian Jessie
Fisch: 2.2.0
Betriebssystem: Maui Linux
Fisch: 2.3.1
Wie reproduziere ich?
Wenn der Remote-Host Fish Shell verwendet, kann der Benutzer rsync und sftp (sftp in der Befehlszeile und in mc) nicht verwenden. Der Remote-Host verwendet ein Anmeldeskript, um einige Informationen anzuzeigen.
Link zum Skript: https://blog.pawel.mydevil.net/index.php/2014/02/20/wyswietlanie-danych-przy-logowaniu-skrypt/
Ich habe auf zwei Hosts getestet. Erster Host ist Debian Jessie (Fisch, Version 2.2.0) und zweiter Maui Linux (Fisch, Version 2.3.1).
sftp
sftp root @ remoteHost
root @ remoteHost 's Passwort:
Nachricht zu lange empfangen 539831597
Teil des Protokolls auth.log
Akzeptiertes Passwort für root vom localHost-Port 48460 ssh2
18. Oktober 19:18:59 bpi sshd [7502]: pam_unix (sshd: session): Sitzung für Benutzer root von (uid = 0) geöffnet
18. Oktober 19:19:00 bpi sshd [7502]: Trennung von localHost empfangen: 11: Vom Benutzer getrennt
18. Oktober 19:19:00 bpi sshd [7502]: pam_unix (sshd: session): Sitzung für Benutzer root geschlossen
rsync:
~ $ sudo rsync -av --delete -e ssh / home / pawel pawel @ remoteHost : / mnt / backup
[sudo] hasło użytkownika pawel:
Das Passwort von
Nicht übereinstimmende Protokollversion - Ist Ihre Shell sauber?
(Eine Erklärung finden Sie in der rsync-Manpage.)
rsync-Fehler: Protokollinkompatibilität (Code 2) bei compatible.c (176) [Absender = 3.1.1]
Ich habe Handbuch und Internet gelesen und den Befehl ausgeführt
"ssh pawel @RemoteIP / bin / true> out.dat"
Die Datei "out.dat" enthält das Ergebnis eines Skripts, das beim Anmelden ausgeführt wird.
Wenn ich den Link zum Skript in der Datei /etc/fish/config.fish auskommentiere, funktioniert alles korrekt.
Funktioniert bei mir. Diese Art von Fehler wird normalerweise dadurch verursacht, dass die Shell-Konfigurationsdateien in stdout schreiben, wenn die Sitzung nicht interaktiv ist. Im Fall von Fisch sollten Sie sicherstellen, dass alles in Ihrem _ ~ / .config / fish / config.fish_ (und den darin enthaltenen Skripten), das möglicherweise in stdout schreibt (oder von stdin liest, aber weniger häufig ist), in ein if status --is-interactive
... end
blockieren.
Vielen dank für Deine Hilfe. Ich habe so etwas gesagt
if status - ist interaktiv
/ path / to / script / which / print / on / console
Ende
in /etc/fish/config.fish und funktioniert perfekt. Das Skript wird nur ausgeführt, wenn die Shell vom Benutzer aufgerufen wird, nicht vom Skript.
Ich habe versucht, "if" in das Skript einzufügen. aber ich weiß nicht, wie man Bash-Skript und Fisch-Skript mischt.
Warum nicht diesen Hinweis auf FAQ setzen? Ich habe eine Zeit lang unter diesem Problem gelitten, weil ich rsync nicht mit Fischschalen verwenden konnte.
Hilfreichster Kommentar
Funktioniert bei mir. Diese Art von Fehler wird normalerweise dadurch verursacht, dass die Shell-Konfigurationsdateien in stdout schreiben, wenn die Sitzung nicht interaktiv ist. Im Fall von Fisch sollten Sie sicherstellen, dass alles in Ihrem _ ~ / .config / fish / config.fish_ (und den darin enthaltenen Skripten), das möglicherweise in stdout schreibt (oder von stdin liest, aber weniger häufig ist), in ein
if status --is-interactive
...end
blockieren.