SSH
Wstęp
-
ssh user@host
- loguje się na UNIXowe konto
user
na komputerzehost
; wymaga zainstalowanego lokalnie klienta SSH i serwera SSH zdalnie (zwykle na porcie 22). Po zalogowaniu możemy wykonywać polecenia shella na zdalnym komputerze (kończymy pracę np. poleceniemexit
)
Implementacja klienta SSH pod Windowsy to np. PuTTY.
Przydatne opcje
-
-C
- włącza kompresję – warto dla wolnych połączeń
-
-c blowfish
- włącza znacznie szybszy niż domyślny (choć nieco słabszy) algorytm szyfrowania – warto dla połączenia ze słabszym obliczeniowo sprzętem
-
-X
- włącza forwardowanie Xów, dzięki czemu po połączeniu ze zdalnym serwerem UNIXa można będzie na nim wykonywać aplikacje z GUI a okienka będą się wyświetlać lokalnie (jeśli łączymy się z Cygwina, wówczas zamiast
-X
warto podać opcję-Y
).
-
-p port
- gdy serwer SSH działa na innym porcie niż domyślny (22)
Potoki
- tar -czf – /var/www * | ssh jas@bolek ‚cat > ~/backup/backup_www.tar.gz’
- pakuje zawartość katalogu
/var/www
na lokalnym komputerze i wysyła ją (przez pipe’a) na zdalny komputer do plikubackup_www.tar.gz
Tunele
-
ssh -R 2222:localhost:22 remotehost
- tworzy tunel łączący lokalny (istniejący) serwer na porcie 22 z portem 2222 na zdalnym komputerze `remotehost` (do tej pory na porcie 2222 komputera `remotehost` nie mogło nic być, a teraz będzie wyjście z tunelu)
-
ssh -L 2222:localhost:22 remotehost
- tworzy tunel łączący zdalny (istniejący) serwer na porcie 22 komputera
remotehost
z portem 2222 na lokalnym komputerze (do tej pory na porcie 2222 komputera lokalnego nie mogło nic być, a teraz będzie wyjście z tunelu). Niektóre wersje ssh pozwalają powiedzieć tak:ssh -L <ip_interfejsu>:2222:localhost:22
– co pozwala dostać się do tunelu z jeszcze innego (trzeciego) komputera.
-
ssh -g -L110:mailhost:110 -L25:mailhost:25 user@mailhost
- przekierowanie kilku portów TCP naraz za pomocą SSH; opcja
-g
udostępnia lokalny port innym komputerom
-
ssh -L5150:intranet.insider.nocat:80 gateway.nocat.net
- przekierowuje lokalny port 5150 komputera na serwer WWW wewnętrznej sieci widocznej poprzez ruter
gateway.nocat.net
; adresintranet.insider.nocat
nie musi być rozpoznawany przez serwery DNS, ponieważ nie jest on wykorzystywany do czasu nawiązania połączenia zgateway.nocat.net
Wyobraźmy sobie sytuację, gdzie komputery Danuta i Jan znajdują się w różnych sieciach za różnymi firewallami, mają adresy lokalne niewidoczne z zewnątrz (maskarada), Jan ma serwer SSH a Danuta chce z niego skorzystać. Danuta i Jan nie mają dostępu do SSH firewalli w swoich sieciach. Niech Marek będzie komputerem z publicznym IP dostępnym gdzieś w internecie, na którym zarówno Danuta jak i Jan mają swoje konta.
Danuta pisze: ssh -L 2223:localhost:2222 marek
.
Jan wykonuje u siebie: ssh -R 2222:localhost:22 marek
.
Danuta ostatecznie zestawia połączenie: ssh -p 2223 localhost
łącząc się z serwerem SSH Jana, a administratorom sieci Jana i Danuty w zasadzie nic do tego.
SOCKS
-
ssh -D 8080 remotehost
- tworzy na lokalnym komputerze na porcie 8080 internetowe proxy SOCK4; to proste polecenie tuneluje nasz niezabezpieczony i niezaszyfrowany ruch WWW z dala od niezaufanych sieci do maszyny
remotehost
w zaufanej sieci; aby surfować w sieci WWW należy przejść do ustawień proxy dla naszej przeglądarki WWW, znaleźć pole do którego wpisuje się nazwę proxy SOCKS oraz numer portu (jako nazwę należy podać `localhost` a jako numer portu 8080)
Logowanie za pomocą kluczy (bez hasła)
Jeśli wygenerujemy sobie klucze: prywatny i publiczny, po czym prześlemy publiczny na serwer, to będziemy mogli logować się przez SSH bez podawania hasła (ma to również znaczenie gdy chcemy w skrypcie shella wykonać zdalne polecenie przez SSH).
W pliku /etc/ssh/sshd_config
należy ustawić wartość yes
dla wpisów RSAAuthentication
i PubkeyAuthentication
(zwykle ustawione).
Generujemy sobie klucze:
ssh-keygen -t dsa -b 2048
(podajemy puste hasło).
Wygenerowany klucz publiczny ~/.ssh/id_dsa.pub
należy przesłać na serwer i umieścić w pliku ~/.ssh/authorized_keys
(dołączyć do pliku lub utworzyć ten plik) – możemy to uczynić bardziej elegancko poleceniem
ssh-copy-id remote_host
Kopiowanie plików
-
scp -r jas@bolek:/etc/ .
- kopiuje katalog
/etc
(z podkatalogami!) na zdalnym komputerze do bieżącego katalogu na komputerze lokalnym
-
sftp jas@bolek
- otwiera interaktywną, bezpieczną sesje FTP pozwalającą na przesyłanie plików (nie wymaga oprogramowania FTP po stronie serwera ani klienta, wystarczy oprogramowanie SSH)
Jeśli ktoś lubi klikanie w okienkach, może do bezpiecznego kopiowania plików użyć programów gftp (Linux) lub WinSCP (Windows), albo użyć:
-
sshfs jas@bolek:katalog_zdalny katalog_lokalny
- montuje zdalny katalog w lokalnym – od tej pory zdalny katalog jest dostępny lokalnie w menedżerze plików tak jak wszystkie katalogi lokalne