Selama seseorang dapat mengeksekusi socat
secara lokal dan pada gateway
(atau bahkan hanya bash
dan cat
pada gateway
, lihat contoh terakhir!) dan diperbolehkan untuk tidak gunakan pty agar 8bits bersih, dimungkinkan untuk membuat terowongan melalui ssh. Berikut adalah 4 contoh, menyempurnakan sebelumnya:
Contoh dasar berfungsi sekali
(memiliki garpu akan membutuhkan satu koneksi ssh per terowongan, tidak bagus). Harus keluar dari :
agar socat menerima perintah exec:
istilah1:
$ socat tcp-listen:12345,reuseaddr exec:'ssh [email protected] exec socat - tcp\:devbox\:22',nofork
istilah2:
$ ssh -p 12345 [email protected]
istilah1:
[email protected]'s password:
istilah2:
[email protected]'s password:
Membalikkan alamat pertama dan kedua membuat soket segera tersedia
socat
harus tetap bertanggung jawab, jadi tidak ada nofork
:
istilah1:
$ socat exec:'ssh [email protected] exec socat - tcp\:devbox\:22' tcp-listen:12345,reuseaddr
[email protected]'s password:
istilah2:
$ ssh -p 12345 [email protected]
[email protected]'s password:
Menggunakan ControlMaster
ssh
memungkinkan untuk melakukan fork saat hanya menggunakan satu koneksi ssh ke gateway, sehingga memberikan perilaku yang mirip dengan penerusan port biasa:
istilah1:
$ ssh -N -o ControlMaster=yes -o ControlPath=~/mysshcontrolsocket [email protected]
[email protected]'s password:
istilah2:
$ socat tcp-listen:12345,reuseaddr,fork exec:'ssh -o ControlPath=~/mysshcontrolsocket [email protected] exec socat - tcp\:devbox\:22'
istilah3:
$ ssh -p 12345 [email protected]
[email protected]'s password:
Hanya memiliki bash
dan cat
tersedia di gateway
Dengan menggunakan bash
pengalihan tcp bawaan, dan dua cat
setengah dupleks perintah (untuk hasil dupleks penuh) seseorang bahkan tidak memerlukan socat
jarak jauh atau netcat
. Penanganan beberapa lapisan tanda kutip bersarang dan lolos agak canggung dan mungkin dapat dilakukan dengan lebih baik, atau disederhanakan dengan menggunakan bash
jarak jauh naskah. Kehati-hatian harus diambil untuk memiliki cat
bercabang untuk keluaran saja:
term1 (tidak ada perubahan):
$ ssh -N -o ControlMaster=yes -o ControlPath=~/mysshcontrolsocket [email protected]
[email protected]'s password:
istilah2:
$ socat tcp-listen:12345,reuseaddr,fork 'exec:ssh -T -o ControlPath=~/mysshcontrolsocket [email protected] '\''exec bash -c \'\''"exec 2>/dev/null 8<>/dev/tcp/devbox/22; cat <&8 & cat >&8"\'\'\'
istilah3:
$ ssh -p 12345 [email protected]
[email protected]'s password:
Ganti ProxyJump dengan Bash
Ide di atas bagus! Ini adalah versi ssh_config generik saya saat ProxyJump tidak berfungsi karena AllowTcpForwarding setel ke no dan shell default saya adalah BASH:
ProxyCommand=ssh -T [email protected] "exec 3<>/dev/tcp/%h/%p 2<&- ; cat <&3 & cat >&3 ; kill $!"
- -T Nonaktifkan alokasi terminal semu
- eksekusi Tidak ada proses baru (bash) yang akan dibuat
- 3<> hanyalah pengalihan ke deskriptor file yang tersedia
- /dev/tcp/... akan meminta bash untuk membuka soket TCP yang sesuai.
- %h dan %p akan dievaluasi oleh klien OpenSSH Anda sebagai devbox dan 22
- 2<&- akan menutup STDERR (Anda juga dapat mengalihkannya ke /dev/null)
- kucing <&3 & akan membaca deskriptor file 3 yang dipilih di latar belakang
- kucing>&3 akan menulis deskriptor file kami di latar depan
- bunuh $! akan mematikan "pembacaan" kucing <&3 perintah berjalan di latar belakang saat Anda menutup/memutus koneksi. Kalau tidak, itu akan terus berjalan.
Itu bisa menggantikan ProxyJump untuk saya dalam situasi ketika dinonaktifkan di server lompat, tetapi saya benar-benar tidak ingin meneruskan kunci pribadi saya di sana atau memasukkan kata sandi apa pun tanpa tingkat enkripsi tambahan. Menggunakan SSH_AUTH_SOCK orang lain sebagai root atau merekam sesi terminal sepenuhnya dengan menekan tombol adalah hal yang nyata.
Tapi tolong, selalu pastikan Anda tidak melanggar kebijakan apa pun yang berlaku untuk Anda!