Anda memintanya untuk mendengarkan pada port lokal 22 Anda dan meneruskan koneksi ke port sistem jarak jauh 8090. Anda tidak dapat melakukan itu, karena port 22 lokal Anda sudah diambil oleh server SSH lokal Anda.
Saya pikir apa yang Anda cari adalah penerusan jarak jauh. Mengganti -L 22:localhost:8090
dengan -R 8090:localhost:22
akan memberi tahu host jarak jauh untuk mendengarkan pada port 8090 dan meneruskan permintaan ke server SSH Anda.
Jika Anda membiarkan koneksi berjalan sehingga Anda bisa masuk nanti dari situs jarak jauh, maka Anda ingin memastikan koneksi tidak habis karena tidak aktif dengan menambahkan opsi yang relevan ( -o TCPKeepAlive=yes
atau -o ServerAliveInterval=30
)
Jadi Anda akan berakhir dengan sesuatu seperti:
ssh -N user@my_server -R 8090:localhost:22 -o ServerAliveInterval=30
Juga, jika salah satu jaringan melompat antara Anda dan server pada titik mana pun, koneksi akan turun meskipun ada opsi KeepAlive yang Anda tentukan, jadi Anda mungkin ingin menambahkan perintah ini ke inittab, atau melihat ke dalam paket daemontools atau distro Anda setara, sehingga selalu dimulai saat boot dan di-restart ketika keluar karena alasan lain selain sistem shutdown (atau Anda dapat menjalankannya dari skrip shell yang loop tanpa batas, tetapi init atau daemontools adalah solusi yang lebih bersih).
GatewayPorts Yes
ke sshd_config saya membantu saya membuka port untuk publik.Alasan Anda tidak dapat melakukan ini adalah karena Anda mencoba meneruskan port 22 di komputer lokal ke port 8090 di server jarak jauh dan sesuatu sudah berjalan di port 22 di server lokal. Kemungkinan besar Anda menjalankan server SSH. Anda dapat memperbaikinya dengan mengubah 22 ke nilai yang berbeda. Anda dapat memeriksa untuk melihat apakah port bebas dengan menjalankan:
Ini mencantumkan semua soket pendengaran, jadi jika port tidak terdaftar, maka gratis.
sumber
Saya menggunakan lsof -i: perintah PortNumber untuk memeriksa apakah port bebas:
jika port gratis Anda tidak akan melihat apa pun dalam output.
sumber