Zasadniczo chcę być w stanie zrobić coś takiego jak Teamviewer, gdzie niezależnie od konfiguracji sieci, o ile zarówno mój serwer ssh (Maszyna A), jak i klient ssh (Maszyna B) mają dostęp do Internetu (i jakiś trzeci serwer, Maszyna C ), Mogę uzyskać dostęp - powodem tego jest to, że chcę móc przesuwać maszynę A dookoła, podłączać ją do zasilania, automatycznie łączyć się z jedną z kilku wstępnie skonfigurowanych sieci Wi-Fi (każda niepowtarzalna / inna) , bez skonfigurowania przekierowywania portów lub podobnych w sieci, i być w stanie zalogować się do niego przez Internet z komputera B.
Jak mogę to osiągnąć? Nie mam nic przeciwko skonfigurowaniu czegoś na serwerze ze statycznym adresem IP, aby pomóc w uzgadnianiu, ale nie mam też nic przeciwko serwerowi innej firmy, jeśli coś już istnieje (tak jak w przypadku teamviewer)
edytuj dla jasności: Mam 3 maszyny, AB i C.
A to bezgłowy malinowy pi, który będzie włączany / wyłączany w losowych lokalizacjach, podłącz do wstępnie skonfigurowanej sieci Wi-Fi
B to urządzenie z odpowiednim monitorem, klawiaturą itp., Z którego chcę się połączyć
C to wynajęty serwer AWS, który mam ze statycznym adresem IP, może niezawodnie SSH w B i może zainstalować wszystko, co jest konieczne, aby pomóc B połączyć się z A
źródło
ssh
Bardzo krótko korzystałem z tuneli. Jednak nigdy nie udało mi się zmusić ich do pozostania na nogachautossh
; jeśli łącze nadrzędne spadło z jakiegokolwiek powodu, zawsze trzeba je było ponownie uruchomić ręcznie. W końcu założyłem małą VPN dla siebie z OpenVPN, i wykonało to dobrze.Odpowiedzi:
Ponieważ masz maszynę C w Internecie, utwórz tam specjalne konto o nazwie
sesame
, a na A utworzysz konto z kluczem publicznym / prywatnym, z którego skopiowałeś klucz publiczny nasesame
konto na C.Możesz teraz zalogować się od A do C, ale zamiast tego:
(możesz połączyć to z instrukcją uśpienia lub np. 10 sekund i owinąć to w niekończącą się pętlę, aby połączenie zostało nawiązane ponownie, jeśli nie działało Wi-Fi)
Z komputera B zwykle loguj się na dowolne konto na C (może być, ale nie musi to być
sesame
konto, używam różnych kont). A kiedy będziesz w C, zaloguj się do A, używając:Możesz oczywiście użyć innej liczby niż 19930.
Możliwe jest uruchomienie
ssh -N -R ...
z,/etc/rc.local
jeśli twój klucz prywatny na A nie jest chroniony hasłem. W takim przypadku należy utworzyćsesame
osobne konto z ograniczoną funkcjonalnością, aby w przypadku naruszenia bezpieczeństwa / kradzieży komputera A ryzyko dla serwera C było ograniczone. Dlatego też polecam użyć osobnego konta, aby przejść z B do C.Rzeczywiście można ustawić powłokę logowania
sesame
w/etc/passwd
celu/bin/false
, więc nie można już korzystać z konta do logowania.źródło
sesame
konto na C, może być tak, że możesz uruchomić go/bin/false
jako powłokę logowania (ponieważ ssh tak naprawdę nigdy się nie loguje), lub w inny sposób ograniczyć go, dodająccommand=
parametr w~/.ssh/authorized_keys
/bin/false
.ssh localhost -p portnum
)Zainstaluj tunel IPv6 (taki jak Sixxs ) na swoim Raspberry Pi. Będziesz teraz mieć stały statyczny adres IPv6, który będzie dostępny w trybie online za każdym razem, gdy Twoje Pi jest online. Upewnij się, że zabezpieczysz swoje Pi, ponieważ jest ono teraz połączone ze światem.
Jeśli Twój B jest podłączony do sieci IPv6, połącz się bezpośrednio z Pi. Jeśli B nie jest podłączony do sieci IPv6, użyj C jako serwera skokowego, gdzie łączysz się przez IPv4 z C, a następnie ssh przez IPv6 z C do twojego Pi.
źródło
Zobacz także:
Zastosowana technologia jest taka sama, jak opisana w zaakceptowanej odpowiedzi, ale wykorzystuje niektóre skrypty do automatyzacji rzeczy i uczynienia rozwiązania bardziej ogólnym. To także sprawia, że całe konfiguracje wewnątrz kontenera Docker, dzięki czemu główny system jest bezpieczny na wypadek, gdyby coś zostało naruszone.
Jednak nie zapewnia automatycznego połączenia z punktu A do C, należy go zainicjować ręcznie. Być może możesz trochę dostosować rozwiązanie, aby działało dokładnie tak, jak chcesz.
źródło
Być może musisz użyć innej koncepcji niż ssh lub tunelowanie .. Sugeruję, abyś używał koncepcji przesyłania wiadomości, takiej jak WhatsApp lub telegram .. Ale myślę, że jeśli chcesz użyć czegoś takiego jak vim, nie jest tak dobry jak ssh ..
Telegram ma klienta telegram-cli, który możesz zmodyfikować, aby zaakceptować i wykonać określone polecenie oraz zaimplementować je w raspi ..
Jeśli używasz Telegramu, możesz uprościć swoją sieć i przynajmniej zmniejszyć maszynę C, aby wykonać Hub, ponieważ serwer C jest podtytułowany serwerem wiadomości telegramowych. Telegram już wymyślił iPhone'a i klienta Android, więc nie sądzę, że potrzebujesz B Maszyna też, możesz zainstalować klienta telegramu dla konkretnego systemu operacyjnego, jeśli chcesz ... bezpieczeństwa? wiadomość telegramowa jest zakodowana. Jeśli ktoś chce ddos twoje raspi? najpierw ddos serwer telegramu.
Tak długo, jak twój raspi może łączyć się z serwerem telegramu (po prostu twój raspi łączy się z Internetem), nawet raspi znajduje się za zaporą ogniową / proxy / prywatnym adresem IP / dynamicznym adresem IP, zawsze możesz wykonać zdalne ...
Dzięki tej koncepcji możesz wykonać zdalne sterowanie w dowolnym miejscu i czasie ..
źródło
Myślę, że powinieneś przyjrzeć się odwrotnemu przekierowaniu portów ssh. W skrócie, najpierw inicjujesz ssh od A do C, używając poniższej składni, a następnie używasz tego portu do tunelowania z powrotem z C do A. Nie trafisz na zaporę domową A, gdy to zrobisz, ponieważ R-Pi już ma tunel.
ssh -R 2210: localhost: 22 myCoolAwsSite.com
Uwzględnij przy tym konsekwencje bezpieczeństwa. Możesz dodać trochę cujitsu jujitsu, aby połączenie zostało ponownie nawiązane po restarcie.
źródło