Bagaimana saya bisa mengonfigurasi sedemikian sehingga saya selalu dapat SSH ke sistem saya melalui internet pada IP dinamis?

11

Pada dasarnya saya ingin dapat melakukan sesuatu seperti teamviewer, di mana terlepas dari apa konfigurasi jaringannya, selama kedua server ssh saya (Mesin A) dan klien ssh (Mesin B) memiliki akses internet (dan beberapa server ke-3, Mesin C ), Saya dapat memperoleh akses - alasan untuk ini adalah saya ingin dapat memindahkan mesin A sekitar, tancapkan ke listrik, minta terhubung secara otomatis ke salah satu dari beberapa jaringan wifi pra-konfigurasi (masing-masing unik / berbeda) , tanpa mengonfigurasi port-forwarding atau serupa pada jaringan, dan dapat login ke dalamnya melalui internet dari Mesin B

Bagaimana saya bisa mencapai ini? Saya tidak keberatan mengatur sesuatu di server dengan alamat IP statis untuk membantu dengan jabat tangan, tapi saya juga tidak keberatan server pihak ke-3 baik jika ada sesuatu yang sudah ada (seperti halnya seperti yang dikatakan oleh teamviewer)

edit untuk kejelasan: Saya punya 3 mesin, AB dan C

A adalah pi raspberry tanpa kepala yang akan dinyalakan / dimatikan di lokasi acak, terhubung ke jaringan wifi pra-konfigurasi

B adalah mesin dengan monitor, keyboard, dll yang tepat yang saya ingin hubungkan

C adalah server AWS sewaan yang saya miliki dengan alamat IP statis, dapat diandalkan SSH dari B, dan dapat menginstal apa pun yang diperlukan untuk membantu B terhubung ke A

pengguna2813274
sumber
Bisakah Anda ssh ke mesin ke-3?
Anthon
@Anthon Saya rasa begitu, saya menamai mereka kembali AB dan C dan menambahkan deskripsi untuk mereka, mudah-mudahan itu membersihkannya
user2813274
cough no-ip.com cough
Joshua
1
no-ip.com tidak akan membantu jika firewall perimeter di lokasi Anda tidak mengizinkan lalu lintas kembali!
bobstro
Saya dulu menggunakan sshterowongan, sangat singkat. Aku tidak pernah bisa membuat mereka begadang, meski dengan autossh; jika uplink turun karena alasan apa pun, mereka harus selalu dimulai ulang dengan tangan. Akhirnya saya membuat VPN kecil untuk saya sendiri dengan OpenVPN, dan itu berhasil dengan baik.
Blacklight Shining

Jawaban:

11

Karena Anda memiliki mesin C di internet, buatlah akun khusus di sana bernama sesame, dan di A Anda membuat akun dengan kunci publik / pribadi tempat Anda menyalin kunci publik ke sesameakun di C.

Anda sekarang dapat masuk dari A ke C, tetapi alih-alih melakukan itu, Anda melakukannya:

ssh -N -R 19930:localhost:22 sesame@yourserverC

(Anda mungkin ingin menggabungkan ini dengan pernyataan tidur atau misalnya 10 detik dan membungkusnya dalam loop tanpa akhir sehingga koneksi dibuat kembali jika WiFi menyebabkannya terputus)

Dari mesin B, biasanya masuk ke akun apa pun yang Anda miliki di C (bisa tetapi tidak harus menjadi sesameakun, akun yang berbeda adalah yang saya gunakan). Dan begitu Anda menggunakan C, login ke A menggunakan:

ssh localhost -p 19930

Tentu saja Anda dapat menggunakan nomor berbeda dari 19930.

Dimungkinkan untuk menjalankan ssh -N -R ...dari /etc/rc.localjika kunci pribadi Anda pada A tidak dilindungi kata sandi. Jika demikian, pastikan untuk membuat sesameakun terpisah dengan fungsionalitas terbatas, sehingga ketika mesin A Anda dikompromikan / dicuri, risiko untuk server C Anda terbatas. Itu juga sebabnya saya sarankan menggunakan akun terpisah untuk beralih dari B ke C.

Anda benar-benar dapat mengatur shell login untuk sesamedi /etc/passwduntuk /bin/false, sehingga Anda tidak lagi dapat menggunakan account untuk login.

Anthon
sumber
Solusi ini berbeda dari menggunakan TeamViewer, di sana server digunakan untuk membuka port yang kemudian diarahkan untuk berkomunikasi secara langsung. Sama seperti program seperti BitTorrent yang berkomunikasi secara langsung setelah menemukan mesin untuk diunduh (tanpa harus membuka port terlebih dahulu).
Anthon
Jadi perbedaan utama adalah bahwa dengan cara ini SEMUA lalu lintas melewati server C, vs C hanya digunakan untuk membuat tautan, dan kemudian tidak digunakan untuk sisa koneksi - saya setuju dengan itu. Anda memiliki poin yang baik sejauh keamanan berjalan, adakah yang harus saya lakukan khususnya untuk membuat wijen tidak dapat melakukan apa pun pada C selain minimum login yang masuk? (Sistem RHEL)
user2813274
1
@ user2813274 Memang semua lalu lintas melewati C dalam skenario ini (yang akan mengambil manfaat dari BitTorrent). Saya tidak yakin seberapa jauh Anda dapat membatasi sesameakun pada C, mungkin Anda dapat membuatnya berjalan /bin/falsesebagai shell login (karena ssh tidak pernah benar-benar masuk), atau sebaliknya membatasi dengan menambahkan command=parameter di~/.ssh/authorized_keys
Anthon
@ user2813274 Jika Anda belum mencoba sendiri: jika Anda memiliki akun khusus untuk menyiapkan proxy terbalik, Anda dapat menonaktifkan login ke akun itu dengan mengubah shell login menjadi /bin/false.
Anthon
1
@ user2813274 Ya saya mencobanya dan itu akan membiarkan saya mengatur terowongan terbalik (Anda memerlukan akun yang berbeda untuk sampai ke server C untuk melakukan ssh localhost -p portnumkursus)
Anthon
7

Instal terowongan IPv6 (seperti Sixxs ) di Raspberry Pi Anda. Anda sekarang akan memiliki alamat IPv6 statis permanen yang akan online setiap kali Pi Anda online. Pastikan Anda mengamankan Pi Anda karena terhubung ke dunia sekarang.

Jika B Anda terhubung ke jaringan IPv6, maka sambungkan langsung ke Pi. Jika B tidak terhubung ke jaringan IPv6, gunakan C sebagai server lompatan, di mana Anda terhubung melalui IPv4 ke C dan kemudian ssh over IPv6 dari C ke Pi Anda.

garethTheRed
sumber
Saya suka ini karena bahkan tidak memerlukan C jika jaringan mendukung IPV6, saya harus mencobanya - ada masalah sejauh firewall memblokir ini secara default?
user2813274
1
Sixxs menyediakan lebih dari satu protokol untuk tunneling IPv6. Jika Anda menggunakan Anything In Anything (AYIYA) Anda akan membutuhkan port TCP 3874 dan port UDP 5072 terbuka dari Pi ke Internet. Pada jaringan rumah, ini seharusnya baik-baik saja; jaringan perusahaan atau kampus mungkin berbeda.
garethTheRed
Menginstal terowongan kedengarannya bisa dilakukan, tetapi sepertinya saya harus mendaftar untuk layanan Sixxs, menunggu mereka kembali kepada saya dengan alamat IP, dll. - tidak lagi sesederhana itu - masih berpotensi solusi yang baik, tetapi saya jangan pikir ini rute yang akan saya tempuh untuk saat ini.
user2813274
1

Lihat juga ini:

Teknologi yang digunakan sama dengan yang dijelaskan dalam jawaban yang diterima, tetapi menggunakan beberapa skrip untuk mengotomatisasi sesuatu dan membuat solusi lebih umum. Itu juga membuat seluruh konfigurasi di dalam wadah Docker, sehingga sistem utama aman jika ada sesuatu yang dikompromikan.

Namun itu tidak menyediakan koneksi otomatis dari A ke C, itu harus dimulai secara manual. Mungkin Anda dapat menyesuaikan solusinya sedikit sehingga ia melakukan apa yang Anda inginkan.

dashohoxha
sumber
0

Mungkin Anda perlu menggunakan selain konsep ssh atau tunneling .. Saya sarankan Anda menggunakan konsep pesan seperti whatsapp atau telegram .. Tapi saya pikir, jika Anda ingin menggunakan sesuatu seperti vim, itu tidak sebagus ssh ..

Telegram memiliki klien telegram-cli yang dapat Anda modifikasi untuk menerima dan menjalankan perintah tertentu dan mengimplementasikannya dalam raspi ..

Jika Anda menggunakan Telegram Anda dapat menyederhanakan jaringan Anda dan setidaknya mengurangi mesin C untuk melakukan Hub karena server C disubstitusi dengan server pesan telegram .. telegram sudah datang dengan iphone dan klien android jadi saya tidak berpikir bahwa Anda memerlukan B Mesin juga, Anda dapat menginstal klien telegram untuk OS tertentu jika Anda ingin .. keamanan? pesan telegram dienkripsi .. Jika seseorang ingin melakukan raspi Anda? mereka akan melakukan ddos ​​server telegram terlebih dahulu ..

Jadi selama raspi Anda dapat terhubung ke server telegram (cukup raspi Anda terhubung ke internet) bahkan raspi ada di belakang firewall / proxy / private IP / dynamic IP, Anda selalu dapat melakukan remote ..

Dengan konsep ini, Anda bisa melakukan remote di mana saja, kapan saja ..

Wicaksono Trihatmaja
sumber
Wat. Itu tidak aman, Anda mempercayai beberapa aplikasi pesan acak, Anda mengatakan bahwa OP harus memodifikasi aplikasi pesan acak tersebut untuk membuatnya berfungsi. Ini bahkan tidak menyadari bahwa aplikasi pesan acak akan sepenuhnya putus dengan sesuatu seperti vim dan memiliki latensi yang mengerikan.
Yet Another User
Nah, jika Anda menggunakannya hanya untuk mengirim perintah saya pikir itu ok .. jika Anda menggunakannya untuk sesuatu seperti vim, saya tidak berpikir itu baik .. nasihat yang baik .. saya akan mengedit jawaban saya
Wicaksono Trihatmaja
Saya tidak berpikir ini adalah apa yang saya inginkan, saya ingin akses shell penuh, tidak benar-benar sesuatu yang kurang dari itu - sejauh menentukan Pi .. Saya tidak terlalu peduli, pertama-tama karena saya harus melakukan pengaturan khusus untuk bahkan terhubung sendiri, kedua karena koneksi akan terputus-putus dan secara acak berubah
user2813274
0

Saya pikir Anda harus melihat forwarding port ssh terbalik. Singkatnya, Anda pertama kali memulai ssh dari A ke C menggunakan sintaksis di bawah ini dan kemudian menggunakan port itu untuk terowongan kembali dari C ke A. Anda tidak akan menabrak firewall rumah A ketika Anda melakukannya karena R-Pi sudah memiliki sebuah terowongan.

ssh -R 2210: localhost: 22 myCoolAwsSite.com

Harap pertimbangkan konsekuensi keamanan saat Anda melakukannya. Anda dapat menambahkan beberapa jujitsu cron sehingga koneksi dibuat kembali setelah reboot.

Melompat Kelinci
sumber
Err ... apa bedanya dengan jawaban Anthon?
user2813274