ssh melalui router tanpa penerusan port

11

Saya memiliki server linux, dan saya ingin meletakkannya di jaringan rumah di belakang router. Saya perlu ssh ke server ini kadang-kadang dari luar, tetapi saya tidak ingin mengatur port forwarding karena saya tidak memiliki akses ke router, dan saya juga tidak tahu ip dari router.

Yang bisa saya lakukan adalah meletakkan beberapa program di server linux, jadi ketika terhubung ke Internet, ia akan terus mengirim data ke server saya yang lain secara online sehingga saya tahu alamat ipnya. Tetapi apakah ada cara untuk ssh ke server di belakang router dari luar? sesuatu seperti NAT atau soket yang mempertahankan koneksi jaringan?

Terima kasih banyak

Jiechao Li
sumber

Jawaban:

24

Apa yang ingin Anda lakukan adalah ssh DARI "server linux" Anda ke sesuatu di luar, seperti "my_other_server" atau sesuatu yang bisa dicapai kedua server.

Anda akan menggunakan penerusan port jarak jauh ssh.
[user@linux_server]$ ssh -R8022:localhost:22 my_other_server.com
Penjelasan: Sambungkan ke my_other_server dan buka port 8022 di sana yang akan meneruskan kembali ke saya di port 22.

Dari my_other_server.com Anda akan dapat ssh ke localhost di port 8022, dan lalu lintas Anda diteruskan ke linux_server membonceng di linux_server -> my_other_server tunnel Penjelasan [user@linux_server]$ ssh -p8022 localhost
: Sambungkan ke diriku di port 8022 yang diteruskan ke linux_server

Jika Anda memiliki masalah dengan linux_server awal -> terowongan my_other_server putus, Anda bisa membuat skrip untuk membuatnya tetap terbuka, menyesuaikan pengaturan keepalive, atau menggunakan autossh.

MattPark
sumber
1
Terima kasih, itu sangat bagus! Saya ingin menggunakan skrip untuk membuatnya tetap terbuka. Pertanyaan lainnya adalah bagaimana jika saya memiliki 1000 'server linux' dan hanya satu 'my_other_server', dapatkah saya ssh ke salah satu dari mereka dengan cara ini? Saya berasumsi mereka semua membutuhkan port yang berbeda dan apakah ada cara yang lebih baik untuk melakukannya?
Jiechao Li
Yah itu tergantung. Sekarang Anda berada di linux_server, bisakah Anda ssh ke linux_server2 dan linux_server3 dari sana? Itu akan menjadi yang termudah. Jadi ya Anda bisa melakukan ini beberapa kali lipat, daripada menggunakan 8022 Anda akan menggunakan 8023, 8024. Jika Anda pergi rute itu, buat file ~ / .ssh / config pada "my_other_server" yang berisi semua nomor port, jadi Anda hanya ssh [alias] bukan ssh [port] localhost. Itu akan menjadi rumit.
MattPark
1
Apakah mungkin untuk mengatur ini hanya dengan dua mesin? Hubungkan B ke A, A kembali ke B melalui dirinya sendiri?
adamyonk
1
Saya baru melakukannya. Dapat mengkonfirmasi bahwa itu berfungsi. \ o /
adamyonk
Ya kawan --- jelas Anda sudah menemukannya. Anda dapat menggunakan sesuatu seperti autosshmenjaganya tetap terbuka.
MattPark
3

Anda dapat menggunakan semacam VPN untuk membuatnya berfungsi, tetapi Anda harus memiliki server yang dapat diakses oleh server yang tidak dapat diakses. Kemudian Anda dapat mengatur OpenVPN di server, PC Anda, dan server firewall, aktifkan client-to-client, dan Anda selesai. http://openvpn.net/howto.html

Nathan C
sumber
Terima kasih. Saya melihat ini, tetapi tampaknya sedikit rumit. Jika saya mengerti dengan benar, saya perlu menginstal OpenVPN di kedua server sehingga mereka dapat berkomunikasi tanpa mengkonfigurasi router, kan?
Jiechao Li
Persis. Anda mengkonfigurasi server sebagai "server", maka dua klien yang ingin Anda hubungkan bersama sebagai "klien" di konfigurasi. SSH terbalik yang disebutkan di atas tampaknya lebih mudah bagi Anda.
Nathan C
2

Jawaban ini didasarkan pada jawaban yang diterima, tetapi menambahkan detail yang memungkinkan saya menyelesaikannya. Saya minta maaf untuk penjelasan pejalan kaki, karena ini sama sekali bukan keahlian saya.

Misalkan Anda memiliki dua komputer, Adan B. Anda ingin sshdari Ake B, dan Anda tidak dapat melakukan penerusan port di router yang terhubung dengannya.

Seperti yang dinyatakan dalam jawaban yang diterima, Anda memerlukan server Suntuk melakukan ini: di komputer B, Anda akan mengizinkan sshkoneksi datang S; dan dari komputer A, Anda akan mengakses terowongan itu Suntuk mencapai B.

Tetapi bagaimana Anda mendapatkan server itu S? Saya menemukan serveo(tautan: https://serveo.net/ ). Ini adalah penggunaan yang sangat sederhana. Anda tidak perlu menginstal apa pun atau mendaftar dan gratis. Menurut situs web, langkah-langkah yang harus diikuti adalah:

  1. Pikirkan alias untuk komputer B. Sebagai contoh computer_B_alias,.

  2. Di komputer B, jalankan ssh -R computer_B_alias:22:localhost:22 serveo.net.

  3. Sekarang, Anda dapat mengakses komputer Bdari komputer Adengan menjalankan berikut di komputer A: ssh -J serveo.net user@computer_B_alias, di mana Anda harus mengganti userdengan nama pengguna di komputer B.

PS: Tentu saja, Anda menjadikan poin 2 sebagai tugas otomatis saat memulai komputer Anda B.

PSS: Sebelum Anda mencoba ini, pastikan yang sshterpasang di kedua komputer. Untuk Ubuntu, sudo apt-get install sshakan melakukan pekerjaan itu.

Godoy
sumber
1

Waktu yang lama untuk menjawab. Berhubungan dengan itu bisa membantu seseorang yang mencari yang sama sekarang.

Jika Anda ingin mengakses server di belakang NAT dan Anda tidak ingin menulis kode, Anda mungkin dapat mencari alat di bawah ini dan menggunakan apa pun yang sesuai dengan kebutuhan Anda.

Kedua alat di atas menganggap Anda memiliki akses ke mesin linux untuk menginstal klien mereka. Beberapa manfaatnya adalah:

  • Keduanya memberi Anda akses ke terminal menggunakan antarmuka web
  • Anda tidak perlu host reverse ssh perantara sendiri.
  • Sangat mudah dipasang
  • Keduanya open source

Saya pribadi lebih suka tmate lebih karena Anda dapat meng-host server tmate di server perantara Anda sendiri (untuk ssh terbalik) sementara teleconsole hanya dapat terhubung ke server mereka sendiri untuk ssh terbalik.

Ankit Kulkarni
sumber