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
sumber
ssh
terowongan, sangat singkat. Aku tidak pernah bisa membuat mereka begadang, meski denganautossh
; 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.Jawaban:
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 kesesame
akun di C.Anda sekarang dapat masuk dari A ke C, tetapi alih-alih melakukan itu, Anda melakukannya:
(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
sesame
akun, akun yang berbeda adalah yang saya gunakan). Dan begitu Anda menggunakan C, login ke A menggunakan:Tentu saja Anda dapat menggunakan nomor berbeda dari 19930.
Dimungkinkan untuk menjalankan
ssh -N -R ...
dari/etc/rc.local
jika kunci pribadi Anda pada A tidak dilindungi kata sandi. Jika demikian, pastikan untuk membuatsesame
akun 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
sesame
di/etc/passwd
untuk/bin/false
, sehingga Anda tidak lagi dapat menggunakan account untuk login.sumber
sesame
akun pada C, mungkin Anda dapat membuatnya berjalan/bin/false
sebagai shell login (karena ssh tidak pernah benar-benar masuk), atau sebaliknya membatasi dengan menambahkancommand=
parameter di~/.ssh/authorized_keys
/bin/false
.ssh localhost -p portnum
kursus)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.
sumber
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.
sumber
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 ..
sumber
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.
sumber