Tunelowanie SSH jest dla mnie bardzo mylące. Zastanawiam się, czy mogę to zrobić w systemie Linux.
Mam 3 maszyny ..
A. My local machine at home.
B. Machine at work that I can SSH into (middle man).
C. My desktop at work that I can only SSH into from machine B.
Więc mogę SSH od A -> B i od B -> C, ale nie od A -> C.
Czy istnieje sposób skonfigurowania tunelu SSH od A do B, więc kiedy uruchamiam inne polecenia SSH, działają one tylko z mojej lokalnej maszyny A? Zasadniczo próbuję sklonować repozytorium git z pracy do domu (i nie mogę zainstalować git na komputerze B).
Ponadto, po instalacji .. Jak mogę to również rozbroić?
Odpowiedzi:
Umieść to w swoim
.ssh/config
pliku na hościeA (szczegóły w man 5 ssh_config ):Teraz następujące polecenie będzie automatycznie tunelowane przez hostB
Możesz chcieć dodać opcje takie jak
-oCiphers=arcfour
i-oClearAllForwardings=yes
przyspieszyć, ponieważ owijaniessh
wewnątrzssh
jest obliczeniowo droższe, a dodatkowy wysiłek i opakowanie nie musi być tak bezpieczne, gdy tuneluje już zaszyfrowany ruch.Jeśli używasz OpenSSH wcześniejszej niż 5.3,
-W
opcja nie jest dostępna. W takim przypadku możesz zaimplementować powyższe za pomocą netcat (nc
):źródło
-W
Opcja powinna być używana zamiastnc
opcji.-W
, tylko ten na hoście A (źródłowy), czy też na hoście B (środkowy komputer)?hostB
, możesz zadeklarować wieleHost hostC
linii powyżej,ProxyCommand
dzięki czemu bardzo łatwo uzyskasz dostęp do kilku hostów za pośrednictwem środkowego serwera.Edycja: To niewłaściwe podejście. Zamiast tego zobacz odpowiedź ephemienta . Ta odpowiedź będzie działać, ale jest potencjalnie mniej bezpieczna i zdecydowanie mniej niesamowita.
Wygląda na to, że potrzebujesz takiego rozwiązania:
To zapewni ci powłokę
machineb
. Zostaw to w spokoju; zminimalizuj okno terminala.Teraz, za każdym razem, gdy nawiążesz połączenie ssh
localhost
, zostaniesz połączonymachinec
przezmachineb
. Kiedy skończysz z tunelem, po prostu zamknij terminal, w którym uruchomiłeś powyższe polecenie.Pamiętaj, że do uruchomienia polecenia potrzebne są uprawnienia administratora.
źródło
-p 8022
do swoich poleceń ssh. Z git jest to łatwe: użyj identyfikatora URIssh://localhost:8022/path/to/repo.git
.Wygląda na to, że potrzebujesz aliasu powłoki na A, który powoduje, że ssh występuje na C
źródło
-t
opcji zewnętrznego ssh, jeśli chcesz interaktywną powłokę, ponieważssh
zakłada-T
ona, że otrzyma polecenie.Do interaktywnej powłoki możesz użyć tego prostego polecenia:
Opcje -J służą do skoku .
źródło
Jeśli Twój pracodawca zapewnia VPN, zalecam korzystanie z niego zamiast tego.
W ten sposób nie będziesz musiał specjalnie konfigurować żadnych aplikacji (nawet ssh) i zobaczysz dowolną maszynę za zaporą. Ponadto cały Twój ruch będzie szyfrowany przez oprogramowanie VPN, które zwiększy bezpieczeństwo każdego przypadkowo lub celowo niezaszyfrowanego ruchu.
źródło
YASS Jeszcze jedno proste rozwiązanie
-f
parametr powiedzieć SSH, aby przejść do tła po nawiązaniu połączeniasleep 10
jest potrzebne do utrzymania połączenia, dopóki drugie polecenie ssh nie użyje przekierowanego portu. Następnie pierwszy ssh zostanie zamknięty, gdy drugi ssh opuści przekierowany port.możesz teraz uruchamiać kolejne sesje ssh:
Wariant:
kolejne sesje ssh można otworzyć, uruchamiając:
Główną zaletą użycia parametrów -M i -S jest to, że tylko jedno połączenie jest otwarte z HostA do HostC, kolejna sesja nie zostanie ponownie uwierzytelniona i uruchomiona znacznie szybciej.
źródło
Przypadek specjalny, mieszane platformy Nix:
hostA (linux) -> HostB (solaris) -> HostC (linux)
Jeśli potrzebujesz aplikacji X na hoście HostC, a przeskok pośredni jest na polu Solaris ... w tym przypadku znalazłem netcat (nc) potrzebny na ProxyCommand w następujący sposób:
hostA: ~ $ vi .ssh / config:
Następnie działa automatyczne tunelowanie:
hostA: ~ $ ssh hostC
źródło