Nah, merujuk kembali ke pertanyaan ini , saya menjalankan perintah
ssh -R 8080:localhost:80 -N [email protected]
pada Mac. Namun pelabuhan yang sedang digali tidak berfungsi secara publik. Saya menjalankan perintah seperti itu untuk membuatnya sehingga port lokal dapat dibuka di komputer jarak jauh. Dan itu berfungsi ketika membuka port pada localhost di komputer jarak jauh, tetapi ketika saya mencoba mengakses alamat IP publik dari komputer jarak jauh dari komputer lokal saya port sepertinya tidak terbuka. Bagaimana saya membuat terowongan publik pada IP untuk diakses siapa pun?
EDIT: Sepertinya sisi jarak jauh hanya mengikat pada localhost alih-alih ke semua antarmuka.
EDIT 2: Klien adalah Mac OS X 10.6 dan servernya adalah Linux Mint, tetapi keduanya adalah OpenSSH.
ssh
ip
openssh
ssh-tunnel
Trevor Rudolph
sumber
sumber
Jawaban:
Jika Anda memeriksa halaman manual untuk ssh, Anda akan menemukan bahwa sintaks untuk
-R
dibaca:Ketika
bind_address
dihilangkan (seperti pada contoh Anda), port terikat pada antarmuka loopback saja. Untuk membuatnya mengikat ke semua antarmuka, gunakanatau
atau
Versi pertama mengikat semua antarmuka satu per satu. Versi kedua membuat ikatan IPv4-only umum, yang berarti bahwa port dapat diakses pada semua antarmuka melalui IPv4. Versi ketiga mungkin secara teknis setara dengan yang pertama, tetapi sekali lagi ia hanya membuat satu ikatan
::
, yang berarti bahwa port dapat diakses melalui IPv6 secara asli dan melalui IPv4 melalui IPv4 yang dipetakan alamat IPv6 (tidak berfungsi pada Windows, OpenBSD) . (Anda memerlukan tanda kutip karena[::]
bisa ditafsirkan sebagai gumpalan sebaliknya.)Perhatikan bahwa jika Anda menggunakan
sshd
server OpenSSH , opsi serverGatewayPorts
harus diaktifkan (disetel keyes
atauclientspecified
) agar ini berfungsi (periksa file/etc/ssh/sshd_config
di server). Jika tidak (nilai default untuk opsi ini adalahno
), server akan selalu memaksa port untuk terikat pada antarmuka loopback saja.sumber
*
dalam bash akan memberikan file dan saya butuhkan\*
0.0.0.0
- ini hanya IPv4, tetapi itu akan melakukan sebagian besar waktu :)Sunting:
-g
berfungsi untuk port penerusan lokal, tetapi yang Anda inginkan adalah port penerusan terbalik / jauh, yang berbeda.Yang kamu inginkan adalah ini .
Pada dasarnya, pada
example.com
, mengaturGatewayPorts=clientspecified
di/etc/ssh/sshd_config
.--- jawaban sebelumnya (salah) ---
Gunakan opsi -g. Dari halaman manual ssh:
sumber
netstat -elnpt
dari tty yang terpisah untuk mencari tahu port apa yang terikat ke alamat apa. Tanpa-g
, port harus terikat127.0.0.1:PORT
. Dengan-g
, itu harus terikat0.0.0.0:PORT
, yang membuatnya dapat diakses dari jarak jauh.GatewayPorts=clientspecified
atauGatewayPorts clientspecified
Inilah jawaban saya untuk penyelesaian:
Saya akhirnya menggunakan
ssh -R ...
untuk tunneling, dan menggunakansocat
di atas itu untuk mengarahkan lalu lintas jaringan ke127.0.0.1
:terowongan diikat ke 127.0.0.1:
ssh -R mitm:9999:<my.ip>:8084 me@mitm
socat:
mitm$ socat TCP-LISTEN:9090,fork TCP:127.0.0.1:9999
Pilihan lain adalah membuat terowongan hanya-lokal di atas itu, tetapi saya menemukan ini jauh lebih lambat
mitm$ ssh -L<mitm.ip.address>:9090:localhost:9999 localhost
sumber
socat
bekerja dengan luar biasa. Sangat berguna, meletakkan ini di saku punggungku;]Anda juga dapat menggunakan maju ganda jika Anda tidak atau dapat mengubah / etc / ssh / sshd_config.
Penerusan pertama ke port sementara (mis. 10080) pada perangkat loopback pada mesin jarak jauh, kemudian gunakan penerusan lokal di sana untuk mengarahkan ulang port 10080 ke 80 pada semua antarmuka:
sumber
Gunakan opsi "gateway port".
ssh -g -R REMOTE_PORT:HOST:PORT ...
Untuk menggunakannya, Anda mungkin perlu menambahkan "
GatewayPorts yes
" ke server Anda/etc/ssh/sshd_config
.sumber
Jump hosts adalah tambahan yang cukup baru untuk OpenSSH. Ini membutuhkan akses SSH ke perantara, tetapi harus berfungsi tanpa konfigurasi tambahan.
Perintah ini menginstruksikan SSH untuk pertama kali terhubung ke
[email protected]
, dan kemudian, dari mesin itu, untuk memulai koneksi ke port 8080 dilocalhost
(yaitu, port yang disalurkan dari host melompat ke host jarak jauh) di bawahremoteuser
nama pengguna.sumber
Jika Anda ingin meletakkan konfigurasi di dalam Anda
~/.ssh/config
daripada menggunakan parameter baris perintah, Anda dapat mencoba sesuatu sepertiHost REMOTE_HOST_NAME RemoteForward \*:8080 127.0.0.1:80
Ingatlah untuk membuat firewall jarak jauh Anda mengizinkan koneksi ke 8080 dan memastikan bahwa
GatewayPorts
opsi/etc/ssh/sshd
konfigurasi Anda tidak disetel keno
sumber