Jawaban:
Ini sangat sederhana dengan versi OpenSSH yang cukup baru jika Anda berencana sebelumnya.
Buka koneksi master pertama kali. Untuk koneksi selanjutnya, rutekan koneksi slave melalui koneksi master yang ada. Di Anda ~/.ssh/config
, atur berbagi koneksi agar terjadi secara otomatis:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
Jika Anda memulai sesi ssh ke yang sama (pengguna, port, mesin) sebagai koneksi yang ada, sesi kedua akan diteruskan ke yang pertama. Membuat koneksi kedua tidak memerlukan otentikasi baru dan sangat cepat.
/var/log/secure
dan /var/log/auth.log
catat koneksi SSH; koneksi slave tidak muncul di sana karena mendukung dukungan yang ada. Jika sesi ssh Anda mengalokasikan terminal (yaitu ssh somehost
tanpa perintah disediakan, atau ssh -t
), yang (biasanya) masuk wtmp
, terlepas dari bagaimana terminal itu muncul (sshd metode apa pun yang digunakan untuk membangun koneksi, aplikasi emulator terminal, ...).
ControlPersist 600
penundaan dalam detik saat soket dalam keadaan siaga sebelum dihapus secara otomatis. Kalau tidak, itu akan menutup secara otomatis ketika koneksi master berakhir. Itu tidak baik untuk mengeksekusi serangkaian perintah dari jarak jauh (mis. Serangkaian perintah rsync ke folder yang berbeda)
-S
(tentukan soket) dan -M
(buat koneksi master) klien SSH.
Itu cukup mudah untuk dicapai dengan menggunakan alat nc dan ssh tunnel.
Dalam sesi ssh Anda, ketikkan ~Cpada baris baru. Anda akan mendapatkan prompt ssh "service console" yang terlihat seperti ini:
ssh>
Ketik perintah penerusan lokal untuk membuka terowongan ssh:
ssh> -L22000:targethost:22001
Forwarding port.
Di mana targethost
nama host atau alamat IP dari mesin yang terhubung dengan Anda.
Sekarang, dengan asumsi server ssh pada mesin target tidak dikonfigurasikan untuk melarang terowongan, Anda memiliki penerusan koneksi yang diinginkan: ssh
klien pada mesin Anda mendengarkan port 22000, dan itu akan meneruskan semua lalu lintas yang dikirim ke port 22001 targethost
.
Ini sesederhana memasukkan ke dalam sesi ssh Anda yang sudah terbuka perintah berikut:
remote$ nc -l localhost 22001 | sh
Ini akan memulai mendengarkan server TCP pada port 22001 - yang merupakan port target dari terowongan ssh kami - dan merutekan data yang diterima (mungkin, perintah shell) ke targethost
instance shell.
local$ cat yourscript.sh | nc localhost 22000
Ini akan mengirim tubuh skrip ke terowongan ssh Anda dan pada akhirnya akan dieksekusi di shell di targethost
. Anda akan melihat output skrip di terminal Anda dengan sesi ssh.
Saya juga akan mencatat bahwa ssh tunnel (langkah 1.) dalam skenario ini tidak sepenuhnya diperlukan; Anda juga dapat memulai server terbuka dan terhubung langsung melalui internet. Namun, Anda harus menggunakan terowongan jika host target tidak dapat dihubungi secara langsung (misalnya di belakang NAT), atau enkripsi ssh diinginkan.
~
karakter harus muncul setelah baris baru, jadi LF ~ C
mungkin urutan yang lebih baik.
less
, pager default umum, mendukung pencarian yang dapat menghemat beberapa pengguliran jika Anda tahu kata kunci Anda: cukup ketik man ssh
/ESCAPE
dan Anda di sana.