Bagaimana cara mengatur ssh tunnel untuk meneruskan ssh?

13

Saya memiliki komputer dengan Ubuntu di belakang router yang tidak dapat saya konfigurasi. Namun saya ingin memiliki akses ssh ke komputer itu. Saya pikir itu mungkin dengan tunneling ssh, tapi saya tidak tahu bagaimana melakukannya. Saya memiliki server lain yang ingin saya setup tunneling. Bagaimana cara melakukannya? Atau mungkin Anda punya ide lain bagaimana mengatasi masalah ini?

Saya mencoba:

ssh -N user@my_server -L 22/localhost/8090

tetapi dikatakan:

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 22
Could not request local forwarding.
Klew
sumber

Jawaban:

18

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:8090dengan -R 8090:localhost:22akan 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=yesatau -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).

David Spillett
sumber
Hampir berhasil. Saya dapat terhubung ke komputer saya, tetapi saya dapat melakukannya hanya ketika saya masuk ke server. Saya ingin terhubung melalui port itu dari mana-mana.
Klew
3
Jika Anda menambahkan alamat publik server atau wildcard ke definisi penerusan port (-R 111.222.333.444:8090:localhost:22 atau -R *: 8090: localhost: 22) maka itu mungkin berhasil, meskipun hal semacam itu dapat dinonaktifkan di server. Jika server yang Anda kontrol, maka pastikan bahwa opsi GatewayPorts diaktifkan di sshd_config.
David Spillett
Saya menulis sebuah skrip yang membantu saya melakukan tunneling ssh, Anda dapat memeriksanya di: github.com/gdbtek/ssh-tunneling
Nam Nguyen
Menambahkan GatewayPorts Yeske sshd_config saya membantu saya membuka port untuk publik.
Adam F
8

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:

# netstat -lep --tcp

Ini mencantumkan semua soket pendengaran, jadi jika port tidak terdaftar, maka gratis.

David Pashley
sumber
3

Saya menggunakan lsof -i: perintah PortNumber untuk memeriksa apakah port bebas:

# lsof -i :2272

jika port gratis Anda tidak akan melihat apa pun dalam output.

Taras
sumber