youatwork@officepc$ autossh -R 12345:localhost:22 notroot@serverpc
Później:
you@homepc$ autossh -L 23456:localhost:12345 notroot@serverpc
you@homepc$ ssh youatwork@localhost -p 23456
Co możesz zrobić, to: w kroku 1 przekieruj zdalny port z komputera biurowego na serwer ( 12345
jest używany jako przykład, każdy port> 1024 powinien zrobić). Teraz połączenie z 12345 na serwerze powinno połączyć cię z portem 22 na officepc.
W kroku 2 przekaż port 23456 z komputera domowego na 12345 na serwerze (skąd zostanie on przesłany do officepc: 22, zgodnie z konfiguracją w kroku 1)
W kroku 3 łączysz się z lokalnym portem 23456 przy użyciu loginu komputera biurowego . Jest to przekazywane krok 2 do portu 12345 na serwerze, a krok 1 na komputer w biurze.
Zauważ, że używam autossh do przekazywania, ponieważ jest to opakowanie ssh, które automatycznie łączy tunel, jeśli zostanie ono odłączone; jednak normalne ssh również działałoby, o ile połączenie nie zostanie zerwane.
Możliwa jest luka: każdy, kto może połączyć się z localhost: 12345 na serverpc, może teraz połączyć się z officepc: 22 i spróbować włamać się do niego. (Pamiętaj, że jeśli używasz serwera SSH, powinieneś zabezpieczyć go ponad podstawowymi zabezpieczeniami, które są domyślnie włączone; Zalecam przynajmniej wyłączenie logowania roota i uwierzytelnienia hasła - patrz np. To )
Edycja : Sprawdziłem to przy tej samej konfiguracji i działa. GatewayPorts no
wpływa tylko na porty otwarte na cały świat, a nie lokalne tunele. Oto jakie są przekazywane porty:
homepc:
outgoing ssh to serverpc:22
listening localhost:23456 forwarded through ssh tunnel
serverpc:
listening ssh at *:22
incoming localhost ssh tunnel (from homepc) forwarded to localhost:12345
listening localhost ssh tunnel (from officepc) forwarded from localhost:12345
officepc:
outgoing ssh to serverpc:22
incoming localhost through ssh tunnel (from serverpc) forwarded to localhost:22
Tak więc, jeśli chodzi o stos sieciowy, to cały ruch lokalny na odpowiednich interfejsach sprzężenia zwrotnego (plus połączenia ssh z serverpc); dlatego GatewayPorts
w ogóle nie jest sprawdzane.
Istnieje jednak dyrektywa AllowTcpForwarding
: jeśli tak no
, to konfiguracja zakończy się niepowodzeniem, ponieważ żadne przekazywanie nie jest w ogóle dozwolone, nawet przez interfejs sprzężenia zwrotnego.
Ostrzeżenia :
jeśli używasz autossh i niedawnego ssh, możesz chcieć użyć ssh ServerAliveInterval
i ServerAliveCountMax
do utrzymania tunelu w górze. Autossh ma wbudowaną kontrolę, ale najwyraźniej ma pewne problemy z Fedorą. -M0
wyłącza to i -oServerAliveInterval=20 -oServerAliveCountMax=3
sprawdza, czy połączenie jest aktywne - próbuje co 20 sekund, jeśli zawiedzie 3 razy z rzędu, zatrzymuje ssh (i autossh tworzy nowe):
autossh -M0 -R 12345:localhost:22 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
autossh -M0 -L 23456:localhost:12345 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
przydatne może być zrestartowanie tunelu ssh, jeśli przekazywanie nie powiedzie się, przy użyciu -oExitOnForwardFailure=yes
- jeśli port jest już związany, możesz uzyskać działające połączenie SSH, ale nie przekierowany tunel.
użycie ~/.ssh/config
opcji (i portów) jest wskazane, w przeciwnym razie wiersze poleceń staną się zbyt szczegółowe. Na przykład:
Host fwdserverpc
Hostname serverpc
User notroot
ServerAliveInterval 20
ServerAliveCountMax 3
ExitOnForwardFailure yes
LocalForward 23456 localhost:12345
Następnie możesz użyć tylko aliasu serwera:
autossh -M0 fwdserverpc