Fish-shell: Rsync und sftp funktionieren nicht, wenn der Remote-Host Fischschalen verwendet

Erstellt am 18. Okt. 2016  ·  3Kommentare  ·  Quelle: fish-shell/fish-shell

OS: Debian Jessie
Fisch: 2.2.0

Betriebssystem: Maui Linux
Fisch: 2.3.1

Wie reproduziere ich?

  1. Stellen Sie auf dem Remote-Host ein Skript ein, das bei der Anmeldung ausgeführt werden soll (das Skript sollte eine Nachricht in der Befehlszeile drucken).
  2. Versuchen Sie, sich über sftp -> Fail beim Remote-Host anzumelden
  3. Versuchen Sie, ein Verzeichnis über rsync zu synchronisieren. Rsync sollte ssh verwenden, um das Verzeichnis auf dem Remote-Host zu synchronisieren. -> Fehlschlagen

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.

question

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.

Alle 3 Kommentare

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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen