GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi l'option Ssh -t ajoute-t-elle Cr &Lf dans la sortie redirigée ?

Je me connecte depuis ma windowsbox avec putty à une box linux. Après cela, je fais ce qui suit :

sur le serveur A :

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

sur le serveur 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

Pourquoi la sortie redérivée a-t-elle maintenant CR &LF ? Cela se produit uniquement avec l'option -t de ssh. -t est nécessaire si j'ai besoin d'exécuter des commandes sur une connexion ssh avec sudo. comme par exemple :

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

Merci pour vos suggestions

Réponse acceptée :

Inspectez les paramètres TTY.

$ 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

Ceux-ci peuvent varier, mais ils montrent ici que par défaut sous ssh -t que igncr "ignorer CR" est désactivé sur l'entrée, et pour la sortie, onlcr est défini (mappe NL à CR-NL) et que CR ne sont autrement pas mutilés ou omis. On peut rechercher ces termes dans le stty(1) manuel, et voir aussi termios(4) (que Linux peut placer dans une autre section man).

Les paramètres peuvent également être modifiés (mais cela peut cependant casser des choses qui, pour une raison quelconque, nécessitent onlcr set):

$ 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
$ 

Il peut être plus judicieux d'utiliser à la place scp ou sftp pour copier les données afin d'éliminer le risque de traitement (pseudo)tty CR/NL entraînant des modifications du contenu du fichier.


Linux
  1. Pourquoi la substitution de commande Shell engloutit-elle un caractère de fin de ligne ?

  2. Pourquoi Sudo ignore-t-il les alias ?

  3. Ssh – Comment Ssh demande-t-il un mot de passe lorsque toutes les entrées et sorties sont redirigées ?

  4. Curl a-t-il un délai d'attente ?

  5. Pourquoi `exit &` ne fonctionne pas ?

Pourquoi un programme avec Fork() imprime-t-il parfois sa sortie plusieurs fois ?

Pourquoi ce pipeline shell sort-il ?

Pourquoi la sortie de certains programmes Linux ne va-t-elle ni à STDOUT ni à STDERR ?

Pourquoi clang génère-t-il du texte inintelligible lorsqu'il est redirigé ?

Pourquoi rsync sur SSH me donne-t-il 10 fois le débit de SCP ?

Pourquoi slabtop -o ne renvoie-t-il que les 23 premières lignes lorsque la commande est canalisée ?