stdout
pada satu server CentOS perlu disalurkan ke stdin
server CentOS lainnya. Apakah ini mungkin?
Memperbarui
ScottPack, MikeyB dan jofel semuanya memiliki jawaban yang valid. Saya memberikan jawaban kepada Scott karena, meskipun pertanyaan saya tidak menentukan keamanan sebagai persyaratan, selalu menyenangkan untuk aman. Namun, saran dua rekan lainnya juga akan bekerja.
Jawaban:
Ini ya tidak malu-malu.
Ketika seseorang menggunakan
ssh
untuk mengeksekusi perintah pada server jauh, ia melakukan semacam pengalihan input / output internal yang bagus. Sebenarnya, saya menemukan ini sebagai salah satu fitur OpenSSH yang lebih bagus. Secara khusus, jika Anda menggunakanssh
untuk menjalankan perintah sewenang-wenang pada sistem jarak jauh, maka ssh akan memetakanSTDIN
danSTDOUT
ke perintah yang sedang dijalankan.Untuk keperluan contoh, anggap Anda ingin membuat tarball cadangan, tetapi tidak ingin, atau tidak bisa, menyimpannya secara lokal. Mari kita melihat sintaks ini:
Kami membuat tarball, dan menulisnya
STDOUT
, hal-hal normal. Karena kita menggunakan ssh untuk menjalankan perintah jarak jauh, STDIN dipetakan keSTDIN
ofcat
. Yang kemudian kita arahkan ke file.sumber
netcat
pada kedua ujungnya membuat saluran komunikasi yang sederhana, mudah.tar cf - /path/to/dir | nc 1.2.3.4 5000
di satu server,nc -l -p 5000 > backupfile.tar
di sisi lain.Cara yang nyaman untuk mem-piping data antara host ketika Anda tidak perlu khawatir tentang keamanan melalui kabel menggunakan
netcat
pada kedua ujungnya pada koneksi.Ini juga memungkinkan Anda mengaturnya secara tidak sinkron:
Pada "penerima" (sungguh, Anda akan memiliki komunikasi dua arah, tetapi lebih mudah untuk memikirkannya seperti ini), jalankan:
Dan pada "pengirim", jalankan:
sumber
Alat yang sangat ampuh untuk membuat koneksi satu dan dua arah adalah
socat
. Untuk melihat sekilas kemungkinan, lihat contoh di halaman manualnya .Ini menggantikan
netcat
dan alat-alat serupa sepenuhnya dan memiliki dukungan untuk koneksi terenkripsi ssl. Untuk pemula, mungkin tidak cukup sederhana, tetapi setidaknya baik untuk mengetahui bahwa itu ada.sumber
TL; DR
Hal-hal hanya menjadi sedikit lebih rumit ketika Anda memiliki server benteng yang harus digunakan.
Anda dapat mengirimkan
ssh
sebagai perintah untukssh
menyukainya:cat local_script.sh | ssh -A usera@bastion ssh -A userb@privateserver "cat > remote_copy_of_local_script.sh; bash remote_copy_of_local_script.sh"
Waspadai terminal palsu
Perhatikan bahwa poin penting utama di sini adalah
ssh
, seperti kebanyakan alat, hanya memperlakukanstdout
danstdin
memperbaiki secara default.Namun, ketika Anda mulai melihat opsi suka
Disable pseudo-terminal allocation.
danForce pseudo-terminal allocation.
Anda mungkin perlu melakukan sedikit trial and error. Tapi, sebagai aturan umum Anda tidak ingin mengubahtty
perilaku kecuali Anda mencoba untuk memperbaiki sampah yang rusak / biner di emulator terminal (apa yang diketikkan oleh manusia).Sebagai contoh, saya cenderung menggunakan
-At
sehingga ssh-agent workstation saya diteruskan, dan menjalankan tmux dari jarak jauh tidak muntah biner (seperti begitussh -At bastion.internal tmux -L bruno attach
). Dan, untuk buruh pelabuhan juga (seperti itusudo docker exec -it jenkins bash
).Namun, kedua
-t
flag tersebut menyebabkan beberapa sulit untuk melacak korupsi data ketika saya mencoba melakukan sesuatu seperti ini:sumber
Cobalah untuk meletakkan kunci publik ssh Anda di host lain hanya dengan satu perintah
sumber
Saya menemukan ini sebagai yang termudah, setelah mengatur tidak ada handshaking kata sandi antara server untuk pengguna Anda menjalankan perintah sebagai:
Tidak terkompresi
Kompresi dengan cepat
sumber
ssh
sudah dikonfigurasi untuk kompresi.Compression
dapat diatur di salah satu file konfigurasi, pemeriksaan cepat untuk itu adalah untuk melihat apakahssh -v localhost exit 2>&1 | fgrep -i compress
memberikan output (AFAIK tidak ada pilihan untuk membuang konfigurasi seperti ssh telah membacanya di).tar
memiliki-C path
bendera yang berfungsi untukc
danx
perintah. Anda tidak harus meletakkancd
perintah terpisah di sana. (Tetapi itu baik untuk dicatat bahwa Anda dapat menjalankan lebih dari satu perintah.)-C
adalah ekstensi GNU (meskipun sekarang juga didukung oleh bsdtar dan schily tar)