GNU/Linux >> Belajar Linux >  >> Linux

Mengapa Opsi Ssh -t Menambahkan Cr &Lf Dalam Output yang Dialihkan?

Saya terhubung dari windowsbox saya dengan dempul ke kotak linux. Setelah itu saya melakukan hal berikut:

di Server A:

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

di 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

Mengapa output yang dialihkan sekarang memiliki CR &LF? Ini hanya terjadi dengan opsi -t dari ssh. -t diperlukan jika saya perlu menjalankan perintah pada login ssh dengan Sudo. seperti misalnya:

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

Terima kasih atas saran Anda

Jawaban yang Diterima:

Periksa setelan 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

Ini mungkin berbeda, tetapi mereka menunjukkan di sini bahwa secara default di bawah ssh -t igncr . itu "ignore CR" dinonaktifkan pada input, dan untuk output yang onlcr diatur (memetakan NL ke CR-NL) dan bahwa CR tidak akan rusak atau dihilangkan. Seseorang dapat mencari istilah ini di stty(1) manual, dan lihat juga termios(4) (yang mungkin ditempatkan linux di beberapa bagian man lainnya).

Pengaturan juga dapat diubah-ubah (namun hal ini dapat merusak hal-hal yang karena alasan tertentu memerlukan onlcr tetapkan):

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

Mungkin lebih masuk akal untuk menggunakan scp atau sftp untuk menyalin data untuk menghilangkan risiko penanganan (pseudo)tty CR/NL yang menyebabkan perubahan pada konten file.


Linux
  1. Mengapa Pergantian Perintah Shell Melahap A Trailing Newline Char?

  2. Mengapa Sudo Mengabaikan Alias?

  3. Apa yang dihasilkan pwd?

  1. Ssh – Bagaimana Ssh Meminta Kata Sandi Saat Semua Input dan Output Dialihkan?

  2. Apakah Curl Memiliki Timeout?

  3. Ssh – Bagaimana Tcp-keepalive Bekerja Di Ssh?

  1. Mengapa Program Dengan Fork() Terkadang Mencetak Outputnya Beberapa Kali?

  2. Mengapa stdout perlu pembilasan eksplisit saat dialihkan ke file?

  3. Mengapa login SSH saya lambat?