Ketika semua yang Anda miliki adalah konsol serial (katakanlah melalui telnet melalui server terminal), metode apa yang dapat digunakan untuk mentransfer file masuk / keluar dari host?
Cut / paste berfungsi untuk hal-hal kecil / dapat dicetak dan saya telah bermain dengan kombinasi uuencode / uudecode (dengan gzip) menangani yang tidak patut dicetak tetapi itu semua sangat membatasi.
solaris
console
serial-console
Stephen Paul Lesniewski
sumber
sumber
Jawaban:
Program konsol serial¹ yang akan Anda gunakan di ujung koneksi yang lain akan memiliki beberapa cara untuk mengirim file ke sisi jarak jauh. Bagaimana tepatnya Anda melakukannya tergantung pada sumber daya apa yang Anda miliki pada sistem jarak jauh.
Saya Memiliki
lrzsz
ataukermit
di Sisi RemoteKasus termudah adalah jika Anda memiliki program transfer file biner padat yang diinstal di sisi jarak jauh seperti
lrzsz
ataukermit
. Ini dulunya lebih umum daripada hari ini, tetapi sistem khusus Anda mungkin masih memiliki salah satunya.Program konsol serial yang Anda gunakan di sisi lokal hampir pasti memiliki cara untuk melakukan unggahan Zmodem atau Kermit, yang memungkinkan Anda mengirim apa pun yang Anda butuhkan secara langsung.
Dalam kasus Zmodem, ketikkan saja
rz
pada sistem jarak jauh, yang mengirimkan string khusus yang harus dipahami terminal serial lokal, yang menyebabkannya memunculkan dialog pemilih file.Kermit adalah protokol yang lebih sederhana, jadi Anda harus memulai transfer secara manual dalam kasus itu.
Saya Tidak Memiliki Program Transfer File Biner, tetapi Saya Memiliki
uuencode
/base64
Ada beberapa keuntungan menggunakan program transfer file biner yang tepat seperti
lrzsz
ataukermit
: efisiensi, checksumming, coba ulang otomatis, kembalinya transfer yang dibatalkan, transfer file multipel, dll., Tetapi ini adalah kemewahan . Jika Anda hanya perlu mengirim satu file, atau jarang mengirim file, Anda dapat menghapus unggahan ASCII.Karena protokol terminal menafsirkan banyak nilai byte yang terjadi dalam file data biner, Anda tidak dapat mengirim file secara langsung melalui koneksi yang sama; jika Anda melakukannya, kode emulasi terminal di kedua ujung akan mencoba untuk menafsirkan beberapa data, merusak data dan kemungkinan membingungkan kode penanganan terminal juga.
Anda menyiasatinya dengan menyandikan data biner ke dalam subset ASCII yang aman di sisi lokal, lalu mengubahnya kembali menjadi data biner mentah di sisi jarak jauh. Inilah yang
uuencode
danbase64
program lakukan, hanya berbeda dalam pilihan algoritma kecil.Pada sistem lokal, Anda menyandikan file: ²
Kemudian Anda mengetik perintah ini pada sistem jarak jauh, dan mengirim file menggunakan fitur "ASCII upload" konsol serial:
Ketika unggahan file selesai, tekan Ctrl-Cuntuk keluar
cat
. Sekarang Anda memiliki file yang sudah diterjemahkan pada sistem remote, seperti yang Anda inginkan.Tetapi saya memiliki banyak file untuk dikirim, dan Transcoding ASCII yang dapat dicetak sangat merepotkan!
Tidak sulit untuk melakukan bootstrap sendiri ke tingkat teknologi yang lebih tinggi. Jika sistem jarak jauh memiliki kompiler C, Anda dapat menggunakan teknik sebelumnya untuk mengirim salinan
lrzsz
kode sumber sistem jarak jauh . Di sisi lokal:Kemudian pada sistem jarak jauh, ketikkan ini melalui program konsol serial:
Setelah Anda memulai perintah pertama, lakukan "unggahan ASCII" dari
lrzsz.tgz.uue
file ke sistem jarak jauh. Pipeline menerima data yang uuencoded dan mendekodekannya menjadi tarball biner untuk Anda, yang dapat Anda ekstrak dan bangun.Tapi saya tidak punya C Compiler di Remote System
Jika Anda bahkan tidak memiliki kompiler pada sistem jarak jauh, Anda dapat melakukan kompilasi silang program
rz
(atau apa pun) pada sistem lokal dan mengirimkannya ke sistem jarak jauh menggunakan teknik di atas.Catatan kaki:
minicom , picocom , Putty , VanDyke CRT ...
Anda harus memberikan nama file input ke versi ini
uuencode
dua kali, satu kali untuk memberi nama sumber data input, dan sekali lagi untuk menyatakan apa yang sistem panggilan jarak jauh harus memanggil file ketika itu menerjemahkan data ke file output. Anda mungkin ingin sistem jarak jauh memiliki nama yang berbeda untuk file outputnya.Versi lokal Anda
uuencode
mungkin berperilaku berbeda.sumber
Pada dasarnya Anda harus menggunakan metode pra-internet untuk mentransfer melalui serial tty, dan Anda harus memiliki cara untuk menerima transfer di sisi lain. Jelas cara terbaik untuk melakukan ini adalah dengan menggunakan ZMODEM, yang berarti Anda harus memiliki alat seperti yang
sz
sudah ada di pihak penerima. Namun ini tidak selalu mungkin, misalnya, ketika target penerima adalah router tanpa jaringan.Satu-satunya cara yang mungkin untuk melakukan transfer ini adalah langsung melalui saluran, menggunakan terminal safe ASCII, dengan gaya bersih pra-8-bit. Saya akan menggunakan alat yang lebih modern, yang saya harap diinstal pada sebagian besar sistem.
Pengirim:
Pertama kita mengkodekan file kita
Sekarang pastikan perintah com send-file Anda adalah
ascii-xfr
,, ini adalah baris perintah koneksi sayaBiasanya kami ingin
ascii-xfr
di sisi penerima, tetapi karena kami tidak memilikinya, yang-n
bekerja di sekitar ini dengan mempertahankan ujung garis yang benar.Penerima:
Sekarang kita telah terhubung, buka direktori tempat Anda menginginkan file yang diterima.
Di picocom, saya hanya CTRL + a + s , dan masukkan path lengkap file yang saya kirim. Setelah transfer selesai, Anda perlu CTRL + c untuk menghentikannya
cat
.Sekarang kita mendekode file,
Lakukan apa pun yang Anda bisa untuk memverifikasi file yang IDENTIK untuk yang Anda kirim, karena transfer ASCII tidak memiliki perlindungan checksum. Kotak penerima saya punya
sha512sum
, tetapi perintah checksum apa pun sudah cukup. Setelah Anda secara manual mengkonfirmasi kecocokan jumlah, Anda dapat menganggap transfer berhasil!sumber
\r\n
atau hanya\n
keduanya bekerja bahkan jika mereka "diperbaiki" di sepanjang jalan. Saya tidak ingat lagi jika itu dalam standar base64 atau hanya alat yang saya gunakan, tapi saya curiga itu sebenarnya perilaku standar.Mungkin Anda harus mencoba minicom .
sumber
Tidak tahu apakah ini akan berfungsi jika semua yang Anda miliki adalah konsol serial, tetapi jika Anda memiliki akses jaringan sama sekali, maka Anda dapat menggunakannya
nc(1)
untuk menyalin file menggunakan TCP / IP.Dalam contoh di atas, saya mengkloning
sdbYYY
dari kotak sumber kesdaXXX
kotak tujuan. Pilihan saya 8675 untuk nomor port TCP adalah arbitrer; Anda dapat menggunakan porta apa pun yang dapat Anda akses. Dan itu tidak harus berupa perangkat; itu bisa berupa file apa saja.Pada contoh kedua, saya menyalin kunci publik rsa saya (
~/.ssh/id_rsa.pub
) dan menambahkannya ke file kunci resmi untuk host target.sumber
Saya akan menggunakan kermit , kakek dari program transfer file. Kami menggunakan itu sudah lama sebelum ada Linux.
sumber