Willkommensbanner, das scp stoppt


7

Unser Team hat beschlossen, allen unseren Gastgebern ein Willkommensbanner hinzuzufügen. Ein Teammitglied hat anstelle der Nachricht in /etc/motddie Nachricht mit echoin hinzugefügt ~/.cshrc.

Dies bricht scpzwischen den Hosts. Kann jemand erklären, wie das bricht scp? Wird auch dann cshrcgeladen, 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 xxx@yyy.com"
echo "##############################################################################"

4
Verwandte: Unterdrückungsmeldungen auf stdout unterdrücken . Die .cshrcDatei wird immer gelesen, auch in nicht interaktiven Shells, wie sie von scp gestartet wurden. Alles, was eine Ausgabe erzeugen kann, wie z. B. echooder stty, muss sich in einer if ($?prompt )Anweisung befinden. Es gibt andere, sicherere Möglichkeiten, Bannermeldungen anzuzeigen (z. B. die BannerAnweisung in der SSH-Serverkonfiguration), aber ein Administrator muss dies einrichten.
Mark Plotnick

Auf welchen Computern befinden sich die echoBefehle .cshrc: auf dem lokalen Computer scpund / oder auf dem Remote-Server? Bitte beschreiben Sie "Brechen": Welcher genaue scpBefehl wird ausgeführt und welche Ausgabe- / Fehlermeldung wird erzeugt?
JigglyNaga

@ JigglyNaga hier ist die Ausgabe [aime@abc ~]$ scp 20160830210005defaults.conf aime@xyz:/scratch/aime aime@xyz's password: ########################################################################################################
Tarunkt

4
Ihr Kollege hat auch einen Tippfehler im Banner gemacht. Könnte ich in Ihrer Organisation mehr Liebe zum Detail vorschlagen? Und ein Peer Review?
Leichtigkeitsrennen im Orbit

Antworten:


19

Befehle, die über dem sshTransport 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.

if ( $?prompt ) then
    echo "Secure machine message..."
    echo "More warnings"
    echo "Etc."
endif

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_configmit einer Zeile wie der folgenden aktiviert werden :

Banner /etc/issue.net

Was sind "große Datenmengen"?
Bot47

@ MaxRied Ich würde vorschlagen, dass es bestenfalls etwas viel Größeres als eine Eingabeaufforderung ist. Für einige Befehle kann es überhaupt etwas sein. Ich weiß es nicht genau - ich habe es nie gemessen.
Roaima

7

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_configDirektive Banner.

Oder testen Sie die interaktive Sitzung, bevor Sie etwas drucken (z. B. indem Sie eine Existenz TERModer promptVariablen testen ).


Hintergrundinformationen finden Sie in meiner Antwort auf die Serverfehlerfrage SSH MOTD pro Benutzer .


1

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


0

Es ist in ~/.cshrc. Ich glaube, das macht es einfach, das Problem zu beheben. Ändern Sie den Code ~/.cshrczum Lesen

echo 1>&2 "##############################################################################"
echo 1>&2  "                              Alert! Aler! Alert! Alert! Alert! Alert!"
echo 1>&2  "This is a restricted box, any actions performed here will be reported to xxx@yyy.com"
echo 1>&2  "##############################################################################"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.