O ile nie zrozumiałem źle, co musisz zrobić, osiągnięcie celu jest dość proste, jeśli kontrolujesz B i możesz skonfigurować demona SSH na B, aby nasłuchiwał na porcie 443 zamiast standardowego portu 22 i ustawił dowolne oprogramowanie zapory ogniowej na B aby umożliwić łączność przychodzącą do portu 443, o ile jakikolwiek ruch do portu 443 jest dozwolony wychodzący z używanej sieci.
Jeśli B jest systemem Linux, zmuszenie go do nasłuchiwania na porcie 443 dla połączeń SSH prawdopodobnie będzie wymagać niewielkiej aktualizacji /etc/ssh/sshd_config
. Poszukaj wiersza poniżej w pliku:
#Port 22
Usuń „#”, co oznacza, że to, co następuje, w przeciwnym razie będzie traktowane jako komentarz, od początku wiersza. Zmień „22” na „443”, a następnie uruchom ponownie demona SSH.
W systemie klienckim używasz -L
opcji SSH, która spowoduje połączenia lokalne, tj. Połączenia z systemem, z którego inicjujesz połączenia SSH, przekierowane do portu w innym systemie z serwera SSH, z którym się łączysz.
-L [bind_address:]port:host:hostport
Specifies that the given port on the local (client) host is to be
forwarded to the given host and port on the remote side. This
works by allocating a socket to listen to port on the local side,
optionally bound to the specified bind_address. Whenever a con‐
nection is made to this port, the connection is forwarded over
the secure channel, and a connection is made to host port
hostport from the remote machine. Port forwardings can also be
specified in the configuration file. IPv6 addresses can be spec‐
ified by enclosing the address in square brackets. Only the
superuser can forward privileged ports. By default, the local
port is bound in accordance with the GatewayPorts setting. How‐
ever, an explicit bind_address may be used to bind the connection
to a specific address. The bind_address of “localhost” indicates
that the listening port be bound for local use only, while an
empty address or ‘*’ indicates that the port should be available
from all interfaces.
Np. Można użyć polecenia takiego jak poniższe, aby połączyć się z portem 443 przez SSH na komputerze B i pozwolić mu przekierowywać ruch do portu 2222 w systemie lokalnym do portu 22 na A za pośrednictwem portu 443 na B.
ssh -p 443 -L 2222:1.2.3.4:22 myBacct@5.6.7.8
W -p
oznacza „port” i opowiada SSH, które trzeba podłączyć do systemu docelowego, czyli B na 5.6.7.8 na porcie 443 zamiast standardowego portu 443. -L
opowiada SSH stworzyć lokalny port odsłuchu w systemie z z którym nawiązujesz połączenie. W wierszu poleceń wpisałem „2222”, ale numer jest dowolny; po prostu umieść coś większego niż 1024 i mniejszego niż 65 536. -L 2222:1.2.3.4:22
Także instruowanie program SSH w systemie, z którego jest nawiązanie połączenia SSH do B do przekazania żadnego ruchu, które otrzymuje na porcie 2222 przez tunel SSH to ustanowił B. A gdy opuszcza drugi koniec tunelu, B wysyła go do A w 1.2.3.4 na porcie 22. Zatem z perspektywy A połączenie SSH z nim pochodzi z B.
Następnie w systemie, z którego ustanawiasz połączenie, musisz zainicjować kolejne połączenie SSH, ale tym razem do portu 2222 na sobie. Możesz to zrobić w następujący sposób:
ssh -p 2222 myAacct@127.0.0.1
Teraz twój system łączy się z niestandardowym portem 2222 na adresie hosta lokalnego , tj. 127.0.0.1. Pierwsze ustawione połączenie SSH ma oprogramowanie klienckie SSH nasłuchujące na porcie 2222 dla połączeń, a następnie przekierowujące ruch przez tunel SSH do portu 443 na B, gdzie jest następnie przesyłane dalej do portu 22 na A. Po zainicjowaniu połączenia hasło monit, który otrzymasz, jeśli korzystasz z uwierzytelniania hasłem, będzie na maszynie A.
Zapora w sieci, z której powstaje pierwsze połączenie SSH, widzi tylko połączenie wychodzące z portem 443 na B. Ale w połączeniu z portem 443 na B znajduje się zaszyfrowany tunel, który kieruje cały ruch do portu 2222 klienta SSH do port 22 na A.
Korzystam z podobnego podejścia do przesyłania plików do / z serwera SSH A, który znajduje się w strefie sieci z ograniczeniami, gdzie jedyna dozwolona łączność przychodząca SSH musi przechodzić przez host bastionowy B. Uwaga: jeśli musisz również wykonać transfer plików używając bezpiecznego kopiowania (SCP) , musisz użyć wielkiej litery „P” z SCP, aby określić port, podczas gdy w ssh musisz użyć małej litery „p”.
Jeśli nie używasz systemu Linux lub OS X jako systemu klienckiego SSH, możesz zastosować podobne podejście do przekierowania portów w PuTTY lub innym oprogramowaniu klienckim SSH.