Unser Team hat beschlossen, allen unseren Gastgebern ein Willkommensbanner hinzuzufügen. Ein Teammitglied hat anstelle der Nachricht in /etc/motd
die Nachricht mit echo
in hinzugefügt ~/.cshrc
.
Dies bricht scp
zwischen den Hosts. Kann jemand erklären, wie das bricht scp
? Wird auch dann cshrc
geladen, wenn Sie dies tun scp
? Und wie werden einige Echo-Nachrichten darin es brechen?
Mir ist die interne Funktionsweise von nicht bekannt scp
.
Die Nachricht, die wir hinzugefügt haben ~/.cshrc
:
echo "##############################################################################"
echo " Alert! Aler! Alert! Alert! Alert! Alert!"
echo "This is a restricted box, any actions performed here will be reported to [email protected]"
echo "##############################################################################"
.cshrc
Datei wird immer gelesen, auch in nicht interaktiven Shells, wie sie von scp gestartet wurden. Alles, was eine Ausgabe erzeugen kann, wie z. B.echo
oderstty
, muss sich in einerif ($?prompt )
Anweisung befinden. Es gibt andere, sicherere Möglichkeiten, Bannermeldungen anzuzeigen (z. B. dieBanner
Anweisung in der SSH-Serverkonfiguration), aber ein Administrator muss dies einrichten.echo
Befehle.cshrc
: auf dem lokalen Computerscp
und / oder auf dem Remote-Server? Bitte beschreiben Sie "Brechen": Welcher genauescp
Befehl wird ausgeführt und welche Ausgabe- / Fehlermeldung wird erzeugt?[aime@abc ~]$ scp 20160830210005defaults.conf aime@xyz:/scratch/aime aime@xyz's password: ########################################################################################################
Antworten:
Befehle, die über dem
ssh
Transport ausgeführt werden, erwarten keine großen Ausgabemengen, bevor sie ihren Server starten können. Dies betrifft eine Reihe von Dienstprogrammen.Die Lösung besteht darin, dass Ihr Verwaltungsteam die Nachricht nur druckt, wenn stdout mit einem Terminal verbunden ist.
Besser noch, Sie würden dies überhaupt nicht eingeben
.cshrc
, sondern der Nachrichteninhalt selbst würde eingehen/etc/issue.net
, der vor dem Anmelden angezeigt wird . Dies muss jedoch möglicherweise/etc/ssh/sshd_config
mit einer Zeile wie der folgenden aktiviert werden :quelle
In einer nicht interaktiven Sitzung können Sie nichts drucken. Dadurch werden alle Clients beschädigt, die ein striktes Protokoll verwenden, z. B. SFTP oder SCP.
Verwendung
/etc/motd
(wird nur für interaktive Sitzungen verwendet).Oder verwenden Sie die
sshd_config
DirektiveBanner
.Oder testen Sie die interaktive Sitzung, bevor Sie etwas drucken (z. B. indem Sie eine Existenz
TERM
oderprompt
Variablen testen ).Hintergrundinformationen finden Sie in meiner Antwort auf die Serverfehlerfrage SSH MOTD pro Benutzer .
quelle
Ich glaube, dass Sie die Zeilen ÜBER irgendetwas in der .cshrc-Datei platzieren müssen, weil es Ihnen sonst nicht erlaubt, sftp oder ftp oder was auch immer zu tun, weil es eine interaktive Shell ist:
Diese Fehler werden normalerweise durch Befehle in einer Shell-Run-Control-Datei (.cshrc, .profile, .bashrc usw.) verursacht, die eine Ausgabe an das Terminal erzeugen. Diese Ausgabe stört die Kommunikation zwischen dem SSH-Daemon und dem SFTP-Server-Subsystem. Beispiele für solche Befehle können Datum oder Echo sein. Wenn Sie den Befehl mail verwenden, um nach E-Mails zu suchen, kann dies ebenfalls zu einem Fehler führen. Um dieses Problem zu beheben, sollten Sie alle Befehle, die eine Ausgabe erzeugen, in eine bedingte Anweisung einfügen, die nur ausgeführt wird, wenn die Shell interaktiv ist. (ALLE FIXES MÜSSEN sich oben in den Steuerdateien für die betreffende Shell befinden.
Brian Baker
quelle
Es ist in
~/.cshrc
. Ich glaube, das macht es einfach, das Problem zu beheben. Ändern Sie den Code~/.cshrc
zum Lesenquelle