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.