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 example@unixlinux.online exec socat - tcp\:devbox\:22',nofork
istilah2:
$ ssh -p 12345 example@unixlinux.online
istilah1:
example@unixlinux.online's password:
istilah2:
example@unixlinux.online's password:
Membalikkan alamat pertama dan kedua membuat soket segera tersedia
socat
harus tetap bertanggung jawab, jadi tidak ada nofork
:
istilah1:
$ socat exec:'ssh example@unixlinux.online exec socat - tcp\:devbox\:22' tcp-listen:12345,reuseaddr
example@unixlinux.online's password:
istilah2:
$ ssh -p 12345 example@unixlinux.online
example@unixlinux.online'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 example@unixlinux.online
example@unixlinux.online's password:
istilah2:
$ socat tcp-listen:12345,reuseaddr,fork exec:'ssh -o ControlPath=~/mysshcontrolsocket example@unixlinux.online exec socat - tcp\:devbox\:22'
istilah3:
$ ssh -p 12345 example@unixlinux.online
example@unixlinux.online'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 example@unixlinux.online
example@unixlinux.online's password:
istilah2:
$ socat tcp-listen:12345,reuseaddr,fork 'exec:ssh -T -o ControlPath=~/mysshcontrolsocket example@unixlinux.online '\''exec bash -c \'\''"exec 2>/dev/null 8<>/dev/tcp/devbox/22; cat <&8 & cat >&8"\'\'\'
istilah3:
$ ssh -p 12345 example@unixlinux.online
example@unixlinux.online'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 example@unixlinux.online "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!