Zdarza się, że trzeba zalogować się do serwera stojącego za firewallem, do którego nie mamy bezpośredniego dostępu (przynajmniej przy użyciu protokołu SSH).
Jeżeli zapora ogniowa jest oparta
- firewall jest system opartym o Linuksa, na którym możemy zalogować się przy użyciu SSH
- mamy możliwość skorzystania z uwierzytelnienia przy użyciu kluczy na oba serwery (nie jest to obligatoryjne, ale nie będzie potrzeby dwukrotnego wprowadzania hasła
Logowanie poprzez wykonanie polecenia
Jedną z podstawowych możliwości aplikacji ssh
jest możliwość wykonania komendy na zdalnej maszynie oraz zwrócenie jej wyniku działania. Najprostsza demonstracja:
-rw-r--r-- 1 lukasz lukasz 8640154 2008-10-21 04:06 mysql-connector-java-5.1.7.tar.gz
Można to wykorzystać i zamiast polecenia ls
wywołać polecenie ssh
i połączyć się ze zdalną maszyną:
Należy zwrócić uwagę na przełącznik użycie przełącznika -t
. Nakazuje on utworzyć terminal na maszynie firewall
. Bez tej opcji połączenie będzie działać, ale nie zostanie pokazany np. standardowy znak zachęty.
O czym należy pamiętać:
- jeżeli korzystamy z uwierzytelniania opartego o klucze, to nasz klucz publiczny musi być zainstalowany na maszynie
firewall
, oraz klucz publiczny z maszynyfirewall
musi być zainstalowany na maszynieprodukcja
, w przeciwnym wypadku będzie trzeba podać hasła - niestety sposób ten nie jest kompatybilny z poleceniami
scp
czy teżrsync
, aby przekopiować plik z maszyny lokalnej naprodukcja
należy to wykonać dwuetapowo za pośrednictwem maszynyfirewall
(w przypadku poleceniarsync
da się to ograniczenia ominąć, ale nie jest to już takie oczywiste)
Konfiguracja dyrektywy ProxyCommand
Drugą metodą jest poinformowanie aplikacji ssh
, że do połączenia z daną maszyną musi użyć maszyny pośredniczącej w komunikacji.
Należy utworzyć plik (lub zmodyfikować instniejący) ~/.ssh/config
:
1 2 | Host produkcja ProxyCommand ssh login@firewall nc -q0 %h %p 2> /dev/null |
Parametr Host
(linia 1) wskazuje jakiej maszyny będą dotyczyła konfiguracja. Należy wprowadzić taką nazwę, która będzie użyta podczas łączenia z maszyną wewnątrz sieci. Dyrektywa ProxyCommand
(linia 2) informuje aplikację ssh
o tym, że należy połączyć się z maszyną firewall
i uruchomić polecenie nc
.
Po wprowadzeniu tych zmian, można zainicjować połączenie z serwerem produkcja
Jeżeli używamy uwierzytelniania opartego o klucze połączenie nastąpi automatycznie, w przeciwnym wypadku będzie trzeba podać hasła dostępu do obu serwerów.
O czym należy pamiętać:
- jeżeli używamy uwierzytelnienia opartego o klucze, to zarówno na maszynie
firewall
jak iprodukcja
należy zainstalować klucz z naszego lokalnego systemu (inaczej niż w przypadku pierwszego sposobu) - sposób ten jest przezroczysty zarówno dla polecenia
scp
,rsync
czy też innych korzystających ze standardowego klientassh
, można bezpośrednio kopiować pliki pomiędzy systemami, serwer pośredniczący będzie obsłużony dla nas całkowicie przezroczyście
Źródła
- Strony MAN: ssh_config(5), ssh(1), nc(1)
- Praca po pracy czyli bezpieczny zdalny dostęp do sieci wewnętrznej