Apa yang Anda cari disebut terowongan terbalik. ssh
menyediakannya melalui -R
sakelar:
-R [bind_address:]port:host:hostport
Specifies that the given port on the remote (server) host is to
be forwarded to the given host and port on the local side. This
works by allocating a socket to listen to port on the remote side,
and whenever a connection is made to this port, the connection is
forwarded over the secure channel, and a connection is made to host
port hostport from the local machine.
Ketika OP menemukan jawaban mereka, sintaksnya adalah sebagai berikut:
$ ssh -f -N -R vvv:localhost:22 w.x.y.z
Contoh
Saya memiliki 2 komputer di jaringan, lappy
dan remotey
. Jadi saya menjalankan perintah berikut pada lappy
:
$ ssh -f -N -R 12345:localhost:22 remotey
Saya dapat mengkonfirmasi bahwa itu berfungsi:
$ ps -eaf|grep "[l]ocalhost:22"
saml 27685 1 0 11:10 ? 00:00:00 ssh -f -N -R 12345:localhost:22 remotey
Sekarang jika saya ssh
secara terpisah ke sistem jarak jauh, remotey
dan menjalankan perintah ini saya dapat melihat bahwa itu sekarang menerima koneksi pada port 12345 pada antarmuka lokal sistem jarak jauh:
$ netstat -an|grep :12345
tcp 0 0 127.0.0.1:12345 0.0.0.0:* LISTEN
tcp 0 0 ::1:12345 :::* LISTEN
Menguji koneksi
Anda dapat melihat bahwa terowongan ssh terbalik berfungsi sebagai berikut.
masuk ke remotey
[user@lappy ~]$ ssh remotey
uji port terowongan terbalik
[user@remotey ~]$ ssh -p 12345 localhost
sekarang harus kembali pada lappy
user@localhost's password:
Last login: Thu Aug 1 17:53:54 2013
/usr/bin/xauth: creating new authority file /home/user/.Xauthority
[user@lappy ~]$
Port pada antarmuka selain localhost ( lo
)?
Anda mungkin dibiarkan menggaruk-garuk kepala Anda jika Anda mencoba perintah seperti ini dan sepertinya tidak berfungsi, atau selalu mengikat ke port pada lo
antarmuka localhost ( ).
Sebagai contoh:
lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey
CATATAN: Perintah ini mengatakan untuk membuka port 12345 @ remotey dan tunnel setiap koneksi ke port 22 @ lappy.
Kemudian pada remotey:
remotey$ netstat -an|grep 12345
tcp 0 0 127.0.0.1:12345 0.0.0.0:* LISTEN
Apa yang terjadi adalah sshd
konfigurasi tidak memungkinkan Anda untuk melakukan ini. Faktanya tanpa fitur ini diaktifkan ( GatewayPorts
) Anda tidak akan dapat mengikat ssh
port terowongan apa pun kecuali localhost.
Mengaktifkan GatewayPorts
remotey$ grep GatewayPorts /etc/ssh/sshd_config
#GatewayPorts no
Untuk mengaktifkannya, edit file ini /etc/ssh/sshd_config
:
GatewayPorts clientspecified
Dan mulai kembali sshd
:
remotey$ sudo service sshd restart
Sekarang coba lagi dan kita akan melihat efek yang kita kejar:
lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey
Dan periksa kali ini pada remotey:
remotey$ netstat -anp | grep 12345
tcp 0 0 192.168.1.3:12345 0.0.0.0:* LISTEN 9333/sshd
CATATAN: Dalam contoh di atas kita dapat melihat bahwa sshd
proses sekarang adalah mendengarkan pada antarmuka yang memiliki alamat IP 192.168.1.3, untuk koneksi pada port 12345.
Menguji koneksi (part deux)
Sekarang dengan pengaturan kami yang diubah ketika kami mengujinya kali ini. Perbedaan utama adalah bahwa kita tidak lagi harus terhubung ke localhost!
masuk ke remotey
[user@lappy ~]$ ssh remotey
uji koneksi balik
[user@remotey ~]$ ssh -p 12345 remotey
sekarang harus kembali pada lappy
root@remotey's password:
Last login: Wed Aug 21 01:49:10 2013 from remotey
[user@lappy ~]$
Referensi
Karena komputer B tidak dapat mengakses komputer A, Anda harus membuka terowongan jarak jauh dari komputer A terlebih dahulu.
sumber
Nevermind, saya menemukan jawabannya:
dari komputer A
EDIT: TL; DR, solusi yang benar:
sumber