GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum fügt die Ssh -t Option Cr &Lf in der umgeleiteten Ausgabe hinzu?

Ich verbinde mich von meiner Windowsbox mit Putty zu einer Linux-Box. Danach mache ich folgendes:

auf Server A:

serverA: file /etc/motd
/etc/motd: : ASCII English text

auf Server B:

serverB: ssh -t [email protected] "cat /etc/motd" > /etc/motd.serverA
serverB: file /etc/motd.serverA
/etc/motd.serverA:  ASCII text, with CRLF line terminators

Warum hat die umgeleitete Ausgabe jetzt CR &LF? Dies geschieht nur mit der Option -t von ssh. -t wird benötigt, wenn ich Befehle bei einer SSH-Anmeldung mit sudo ausführen muss. wie zum Beispiel:

serverB: ssh -t [email protected] "sudo cat /etc/shadow" > /etc/shadow

Vielen Dank für Ihre Vorschläge

Akzeptierte Antwort:

Überprüfen Sie die TTY-Einstellungen.

$ ssh -t somewhere 'stty -a' | grep cr
iflags: -istrip icrnl -inlcr -igncr -iuclc ixon -ixoff ixany imaxbel
oflags: opost onlcr -ocrnl -onocr -onlret -olcuc oxtabs -onoeot
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -mdmbuf

Diese können variieren, aber sie zeigen das hier standardmäßig unter ssh -t dass igncr „ignore CR“ ist für die Eingabe deaktiviert und für die Ausgabe von onlcr gesetzt ist (bildet NL auf CR-NL ab) und dass CR ansonsten nicht verstümmelt oder weggelassen werden. Man kann diese Begriffe in stty(1) nachschlagen Handbuch, und siehe auch termios(4) (welches Linux in einem anderen Man-Abschnitt platzieren kann).

An den Einstellungen kann auch rumgefummelt werden (was aber Dinge kaputt machen kann, die aus irgendwelchen Gründen onlcr brauchen einstellen):

$ ssh -t somehost 'stty onlcr; cat /etc/motd' > x ; file x
x: ASCII English text, with CRLF line terminators
$ ssh -t somehost 'stty -onlcr; cat /etc/motd' > x ; file x
x: ASCII English text
$ 

Es kann sinnvoller sein, stattdessen scp zu verwenden oder sftp um Daten zu kopieren, um das Risiko einer (pseudo-)tty CR/NL-Behandlung zu beseitigen, die Änderungen an Dateiinhalten verursacht.


Linux
  1. Warum ignoriert Sudo Aliasse?

  2. Ssh – Wie fragt Ssh nach einem Passwort, wenn alle Ein- und Ausgaben umgeleitet werden?

  3. Hat Curl eine Zeitüberschreitung?

  4. Ssh – Warum ist Firefox gegenüber SSH so langsam?

  5. Ssh – Wie funktioniert TCP-Keepalive in Ssh?

Warum gibt ein Programm mit Fork() seine Ausgabe manchmal mehrmals aus?

Warum gibt Ls -l eine andere Größe als Ls -s aus?

Warum geht die Ausgabe einiger Linux-Programme weder an STDOUT noch an STDERR?

Warum generiert Clang bei der Weiterleitung unverständlichen Text?

Warum gibt mir rsync über SSH den 10-fachen Durchsatz von SCP?

Warum gibt slabtop -o nur die ersten 23 Zeilen zurück, wenn der Befehl weitergeleitet wird?