Chcę uzyskać dostęp do komputera, powiedzmy komputer A, który jest oparty na sieci mojej uczelni. Jednak ten komputer jest dostępny tylko przez wewnętrzną sieć uniwersytetu, więc nie mogę używać SSH do tego komputera bezpośrednio z domu.
Oto co teraz robię:
Zaloguj się do innego komputera uniwersyteckiego, powiedzmy komputer B
(Ta maszyna B jest dostępna przez SSH z mojego komputera domowego.)
Użyj SSH na B, aby połączyć się z A.
Czy istnieje sposób, aby to zrobić szybciej? Używanie tylko jednego polecenia ssh.
networking
ssh
remote-access
tunnel
nikosdi
źródło
źródło
Odpowiedzi:
Tak, używając
ProxyCommand
w konfiguracji SSH.Utwórz plik konfiguracyjny SSH w swoim katalogu domowym (chyba że chcesz zrobić to dla całego systemu)
~/.ssh/config
:Teraz możesz bezpośrednio dotrzeć do maszyny A.
Zauważ też, że teraz masz dla niego pojedynczą nazwę docelową hosta SSH, możesz jej używać również w innych aplikacjach. Na przykład:
SCP do kopiowania plików.
W aplikacjach GUI:
użyj
sftp://user@internalmachine/
jako lokalizacji do przeglądania na maszynie.Oparte na KDE (Dolphin): użyj
fish://user@internalmachine/
Notatki
Zmień
hostname.or.IP.address.internal.machine
i port (22
) na maszynie, do której chcesz dotrzeć, tak jakbyś zunibroker
maszyny.W zależności od wersji netcata na hoście unibrokera
-q0
opcję tę należy pominąć. W odniesieniu do uwierzytelnienia; w zasadzie konfigurujesz dwa połączenia SSH ze stacji roboczej. Oznacza to, że zarówno host unibrokera, jak i host maszyny wewnętrznej są weryfikowane / uwierzytelniane jeden po drugim (zarówno dla pary kluczy / hasła, jak i weryfikacji klucza hosta).Wyjaśnienie
Takie podejście z użyciem
ProxyCommand
i „netcat” jest tylko jednym ze sposobów na to. Podoba mi się to, ponieważ mój klient SSH komunikuje się bezpośrednio z maszyną docelową, dzięki czemu mogę zweryfikować klucz hosta od mojego klienta i mogę korzystać z uwierzytelniania mojego klucza publicznego bez używania innego klucza w brokerze.Każdy
Host
określa początek nowej sekcji hosta.Hostname
to docelowa nazwa hosta lub adres IP tego hosta.User
jest to, co podasz jako część użytkownikassh user@hostname
.ProxyCommand
będzie używany jako rura do maszyny docelowej. Poprzez użycie SSH do pierwszego komputera i bezpośrednie skonfigurowanienc
stamtąd prostego „netcat” ( ) do celu, jest to po prostu zwykły tekst przekazywany do wewnętrznego komputera od brokera pomiędzy nimi. Te-q
opcje są do milczenia żadnego wyjścia (tylko osobiste preferencje).Upewnij się, że na brokerze jest zainstalowany program Netcat (zwykle dostępny domyślnie w systemie Ubuntu) - netcat-openbsd lub netcat-traditional .
Pamiętaj, że nadal używasz SSH z szyfrowaniem dwa razy tutaj. Podczas gdy kanał Netcat jest zwykłym tekstem, twój klient SSH na twoim komputerze skonfiguruje inny zaszyfrowany kanał z ostateczną maszyną docelową.
źródło
Wskakuj za jednym razem
Oczywistą alternatywą dla podejścia ProxyCommand, które podałem w mojej innej odpowiedzi, byłoby „przeskakiwanie” bezpośrednio do maszyny docelowej:
Zwróć uwagę
-t
na pierwszessh
polecenie. Bez tego zawiedzie:Wymusi to przydzielenie prawdziwego TTY
Minusem tego jest to, że teraz cała konfiguracja, weryfikacja i uwierzytelnianie odbywa się na komputerze B, co tak naprawdę nie lubię w mojej sytuacji ze względów bezpieczeństwa. Podoba mi się moja para kluczy na własnym komputerze oraz uwierzytelnianie i weryfikacja docelowej maszyny na własnym komputerze. Ponadto można używać interaktywnej powłoki tylko dla SSH, więc nie będzie to obsługiwać innych narzędzi, takich jak SCP lub menedżer plików GUI.
Ze wszystkich wyżej wymienionych powodów zdecydowanie zalecam podejście ProxyCommand , ale w przypadku szybkiego połączenia działa to dobrze.
źródło
Możesz użyć
-J
opcji wiersza poleceń:Od
man ssh
:Został wprowadzony w wersji OpenSSH 7.3 (wydanej w sierpniu 2016 r.). Jest dostępny w wersji Ubuntu 16.10 i nowszych.
źródło
Spróbuj użyć
w ~ / .ssh / config i zrób to wszystko jednym strzałem z kluczami znajdującymi się tylko na twoim komputerze.
źródło
B
komputerze.To bardzo pomocna sugestia. Po wielu godzinach gadania znalazłem tę notatkę i potwierdziłem, że działa ona dokładnie tak, jak zostało to udokumentowane. Aby połączyć się przez MachineA z MachineB, ze zdalnego komputera C:
np .: [xuser @ machineC ~] ssh -t MachineA ssh MachineB
„-T” jest krytyczne, ssh zawiedzie, jeśli nie jest obecne. Zostaniesz dwukrotnie zapytany, najpierw o hasło na MachineA, a następnie drugi raz na MachineB. Zauważ też, że zakłada się, że na wszystkich trzech komputerach zdefiniowano użytkownika „xuser”. Jeśli nie, po prostu użyj składni ssh: „yuser @ MachineA ...”. Zauważ też, że możesz użyć kropkowanych quad surowych adresów IP, jeśli chcesz. Jest to przydatne, jeśli łączysz się przez prywatną sieć lokalną, która korzysta z adresów IP nie narażonych na świat - tj. nie w lokalnym pliku hosta ani w żadnym DNS. Aby pobrać plik z MachineB, na zdalną maszynę C, możesz scpować z MachineB na MachineA, a następnie z MachineA na zdalną maszynę C. (Np. Zdalna maszyna C może pingować MachineA, ale nie MachineB.) Zastrzeżenie: Testowałem z Fedorą i WindowsXP, MachineA to XP-box z ICS (Udostępnianie połączenia internetowego), podczas gdy MachineB i zdalna maszyna C są pudełkami Fedory-Linux. Ta sugestia rozwiązała dla mnie kluczowy problem - tj. ograniczony, monitorowany zdalny dostęp do mojej zdalnej witryny LAN. Uwaga: po „wylogowaniu” z MachineB powinieneś zobaczyć dwa „Połączenie z xxx.xxx.xxx.xxx zamknięte”. wiadomości.
źródło
-t
nadal jest wymagany.ProxyCommand to czyste rozwiązanie w przypadku, gdy pozwalasz na dostęp do powłoki w obu systemach. Chcieliśmy zapewnić zdalnym użytkownikom dostęp do komputera wewnętrznego (A) za pośrednictwem brokera (B), ale bez umożliwienia użytkownikowi dostępu do powłoki B w celu zwiększenia bezpieczeństwa. To działało:
Zamień powłokę logowania
Zastąp powłokę logowania (użyj
chsh
) dlaextuser
brokera następującym skryptem (przechowywanym w pliku):Pod warunkiem, że nie skonfigurowano hasła logowania w extuser @ B dla użytkownika zdalnego i w internaluser @ A dla extuser @ B, wówczas wykonanie następującego polecenia spowoduje bezpośrednie przejście użytkownika zdalnego do A
Wskazówka : Przed przejściem do niestandardowej powłoki logowania należy utworzyć niezbędną konfigurację logowania bez hasła za pomocą autoryzowanych kluczy w extuser @ B. Po zmianie, ponieważ to konto jest niedostępne dla nikogo przez powłokę, tylko sudoer @ B może dokonać zmian w pliku autoryzowanych_kluczy, edytując je bezpośrednio.
Ostatnim wierszem jest wyłączenie wyświetlania banera logowania z B, aby zdalny użytkownik miał przejrzysty dostęp do A.
źródło
Masz na myśli, że potrzebujesz kilku zworek :)
Ostatnio spotkałem ten problem z jumper1 jumper2 i moją maszyną końcową, tak jak w przypadku mojego sola
skrypt lokalny:
następnie na 1. zworce (która jest moim routerem) umieściłem skrypt o nazwie Y00.sh:
Możesz je zastąpić swoim adresem IP i hasłami, powodzenia!
źródło