Praktyczne przykłady SSH, który wyniesie Twoje umiejętności jako zdalnego administratora systemu na nowy poziom. Polecenia i wskazówki pomogą nie tylko w użyciu SSH, ale także sprawniej poruszać się po sieci.
Znajomość kilku trików ssh przydatne dla każdego administratora systemu, inżyniera sieci lub specjalisty ds. bezpieczeństwa.
W poniższym przykładzie wykorzystano typowe parametry często spotykane podczas łączenia się ze zdalnym serwerem SSH.
localhost:~$ ssh -v -p 22 -C neo@remoteserver
-v: Dane wyjściowe debugowania są szczególnie przydatne podczas analizowania problemów z uwierzytelnianiem. Można go używać wielokrotnie w celu wyświetlenia dodatkowych informacji.
- p 22: port połączenia do zdalnego serwera SSH. 22 nie trzeba podawać, bo to jest wartość domyślna, ale jeśli protokół jest na jakimś innym porcie, to określamy go za pomocą parametru -p. Port nasłuchiwania jest określony w pliku sshd_config w formacie Port 2222.
-C: Kompresja dla połączenia. Jeśli masz wolne połączenie lub przeglądasz dużo tekstu, może to przyspieszyć połączenie.
neo@: Linia przed symbolem @ wskazuje nazwę użytkownika do uwierzytelnienia na serwerze zdalnym. Jeśli go nie określisz, domyślnie będzie to nazwa użytkownika konta, na którym jesteś aktualnie zalogowany (~$whoami). Użytkownika można również określić za pomocą parametru -l.
remoteserver: nazwa hosta, z którym chcesz się połączyć sshmoże to być w pełni kwalifikowana nazwa domeny, adres IP lub dowolny host w pliku hostów lokalnych. Aby połączyć się z hostem obsługującym zarówno IPv4, jak i IPv6, możesz dodać parametr do wiersza poleceń -4 lub -6 dla prawidłowego rozwiązania.
Wszystkie powyższe parametry są opcjonalne, z wyjątkiem remoteserver.
Korzystanie z pliku konfiguracyjnego
Chociaż wielu zna ten plik sshd_config, istnieje również plik konfiguracyjny klienta dla tego polecenia ssh. Domyślna wartość ~/.ssh/config, ale można go zdefiniować jako parametr opcji -F.
Host *
Port 2222
Host remoteserver
HostName remoteserver.thematrix.io
User neo
Port 2112
IdentityFile /home/test/.ssh/remoteserver.private_key
W powyższym przykładowym pliku konfiguracyjnym ssh znajdują się dwa wpisy dotyczące hosta. Pierwsza oznacza wszystkie hosty, wszystkie korzystające z parametru konfiguracyjnego Portu 2222. Druga mówi, że dla hosta zdalny serwer należy użyć innej nazwy użytkownika, portu, nazwy FQDN i pliku tożsamości.
Plik konfiguracyjny może zaoszczędzić dużo czasu na pisaniu, umożliwiając automatyczne zastosowanie zaawansowanej konfiguracji podczas łączenia się z określonymi hostami.
Kopiowanie plików przez SSH przy użyciu SCP
Klient SSH zawiera dwa inne bardzo przydatne narzędzia do kopiowania plików szyfrowane połączenie ssh. Poniżej znajdziesz przykład standardowego użycia poleceń scp i sftp. Należy pamiętać, że wiele opcji ssh ma zastosowanie również do tych poleceń.
W tym przykładzie plik mypic.png skopiowane do zdalny serwer do folderu /media/dane i zmieniono nazwę na mypic_2.png.
Nie zapomnij o różnicy w parametrze portu. To tutaj wiele osób zostaje złapanych podczas startu scp z wiersza poleceń. Oto parametr portu -PI nie -p, tak jak w kliencie ssh! Zapomnisz, ale nie martw się, wszyscy zapominają.
Dla tych, którzy znają konsolę ftp, wiele poleceń jest podobnych w sftp. Możesz to zrobić naciskać, położyć и lsjak serce pragnie.
sftp neo@remoteserver
Praktyczne przykłady
W wielu z tych przykładów wyniki można osiągnąć różnymi metodami. Jak we wszystkich naszych podręczniki i przykłady, preferowane są przykłady praktyczne, które po prostu spełniają swoje zadanie.
1. Serwer proxy SSH skarpetki
Funkcja SSH Proxy jest numerem 1 nie bez powodu. Jest potężniejszy, niż wielu zdaje sobie sprawę, i zapewnia dostęp do dowolnego systemu, do którego zdalny serwer może uzyskać dostęp za pomocą praktycznie dowolnej aplikacji. Klient ssh może tunelować ruch przez serwer proxy SOCKS za pomocą jednego prostego polecenia. Ważne jest, aby zrozumieć, że ruch do systemów zdalnych będzie pochodził ze zdalnego serwera, zostanie to wskazane w dziennikach serwera WWW.
Tutaj uruchamiamy proxy skarpetek na porcie TCP 8888, drugie polecenie sprawdza, czy port jest aktywny w trybie nasłuchiwania. 127.0.0.1 wskazuje, że usługa działa tylko na hoście lokalnym. Możemy użyć nieco innego polecenia do nasłuchiwania na wszystkich interfejsach, w tym na sieci Ethernet lub Wi-Fi, pozwoli to innym aplikacjom (przeglądarkom itp.) w naszej sieci na łączenie się z usługą proxy za pośrednictwem proxy ssh skarpetki.
Teraz możemy skonfigurować przeglądarkę tak, aby łączyła się z proxy skarpetek. W przeglądarce Firefox wybierz Ustawienia | Podstawowy | Ustawienia sieci. Określ adres IP i port, z którym chcesz się połączyć.
Zwróć uwagę na opcję znajdującą się na dole formularza, umożliwiającą przesyłanie żądań DNS przeglądarki również przez serwer proxy SOCKS. Jeśli używasz serwera proxy do szyfrowania ruchu internetowego w sieci lokalnej, prawdopodobnie będziesz chciał wybrać tę opcję, aby żądania DNS były tunelowane przez połączenie SSH.
Aktywacja proxy skarpetek w przeglądarce Chrome
Uruchomienie przeglądarki Chrome z określonymi parametrami wiersza poleceń włączy proxy skarpetki, a także tunelowanie żądań DNS z przeglądarki. Ufaj, ale sprawdzaj. Używać tcpdump aby sprawdzić, czy zapytania DNS nie są już widoczne.
Należy pamiętać, że wiele innych aplikacji może również korzystać z proxy skarpetek. Przeglądarka internetowa jest po prostu najpopularniejszą ze wszystkich. Niektóre aplikacje mają opcje konfiguracji umożliwiające włączenie serwera proxy. Inni potrzebują niewielkiej pomocy z programem pomocniczym. Na przykład, łańcuchy proxy pozwala na uruchomienie przez skarpetki proxy Microsoft RDP itp.
Parametry konfiguracyjne proxy Socks są ustawione w pliku konfiguracyjnym proxychains.
Wskazówka: jeśli korzystasz ze zdalnego pulpitu z Linuksa na Windowsie? Wypróbuj klienta BezpłatnyRDP. Jest to bardziej nowoczesna implementacja niż rdesktop, zapewniając znacznie płynniejsze wrażenia.
Możliwość korzystania z SSH poprzez proxy skarpetki
Siedzisz w kawiarni lub hotelu - i jesteś zmuszony korzystać z raczej zawodnego Wi-Fi. Uruchamiamy lokalnie serwer proxy ssh z laptopa i instalujemy tunel ssh do sieci domowej na lokalnym Rasberry Pi. Za pomocą przeglądarki lub innych aplikacji skonfigurowanych dla proxy skarpetek możemy uzyskać dostęp do dowolnych usług sieciowych w naszej sieci domowej lub uzyskać dostęp do Internetu za pośrednictwem naszego łącza domowego. Wszystko pomiędzy Twoim laptopem a serwerem domowym (przez Wi-Fi i Internet do Twojego domu) jest szyfrowane w tunelu SSH.
2. Tunel SSH (przekierowanie portów)
W najprostszej formie tunel SSH po prostu otwiera port w systemie lokalnym, który łączy się z innym portem na drugim końcu tunelu.
Spójrzmy na parametr -L. Można to traktować jako lokalną stronę słuchania. Zatem w powyższym przykładzie port 9999 nasłuchuje po stronie hosta lokalnego i jest przekazywany przez port 80 do serwera zdalnego. Pamiętaj, że 127.0.0.1 odnosi się do localhost na zdalnym serwerze!
Wejdźmy po stopniu. Poniższy przykład komunikuje porty nasłuchujące z innymi hostami w sieci lokalnej.
W tym przykładzie przekierowujemy tunel z serwera zdalnego na serwer WWW działający w dniu 10.10.10.10. Ruch ze zdalnego serwera do 10.10.10.10 nie jest już w tunelu SSH. Serwer WWW w dniu 10.10.10.10 będzie uważał serwer zdalny za źródło żądań sieciowych.
4. Odwrotny tunel SSH
Tutaj skonfigurujemy port nasłuchujący na zdalnym serwerze, który będzie łączyć się z portem lokalnym na naszym hoście lokalnym (lub innym systemie).
Ta sesja SSH ustanawia połączenie z portu 1999 na zdalnym serwerze do portu 902 na naszym lokalnym kliencie.
5. Zwrotne proxy SSH
W tym przypadku konfigurujemy proxy skarpetki na naszym połączeniu ssh, ale serwer proxy nasłuchuje na zdalnym końcu serwera. Połączenia z tym zdalnym serwerem proxy pojawiają się teraz z tunelu jako ruch z naszego hosta lokalnego.
Jeśli masz problemy z działaniem opcji zdalnego SSH, skontaktuj się z nami netstat, do jakich innych interfejsów podłączony jest port nasłuchujący. Chociaż w przykładach wskazaliśmy 0.0.0.0, ale jeśli wartość Porty bramy в sshd_config Ustawić Nie, wówczas słuchacz będzie powiązany tylko z hostem lokalnym (127.0.0.1).
Ostrzeżenie bezpieczeństwa
Należy pamiętać, że otwierając tunele i proxy, wewnętrzne zasoby sieciowe mogą być dostępne dla niezaufanych sieci (takich jak Internet!). Może to stanowić poważne zagrożenie bezpieczeństwa, dlatego upewnij się, że rozumiesz, kim jest słuchacz i do czego ma dostęp.
6. Instalacja VPN przez SSH
Powszechnym terminem wśród specjalistów od metod ataków (pentestery itp.) jest „punkt podparcia w sieci”. Po nawiązaniu połączenia w jednym systemie, system ten staje się bramą dla dalszego dostępu do sieci. Punkt podparcia, który pozwala poruszać się wszerz.
Do takiego punktu oparcia możemy użyć serwera proxy SSH i łańcuchy proxyjednak istnieją pewne ograniczenia. Przykładowo nie będzie możliwości bezpośredniej pracy z gniazdami, przez co nie będziemy mogli skanować portów w sieci poprzez NmapSYN.
Korzystając z tej bardziej zaawansowanej opcji VPN, połączenie zostaje zredukowane do poziom 3. Możemy wtedy po prostu skierować ruch przez tunel, korzystając ze standardowego routingu sieciowego.
Metoda wykorzystuje ssh, iptables, tun interfaces i routingu.
Najpierw musisz ustawić te parametry sshd_config. Ponieważ wprowadzamy zmiany w interfejsach zarówno systemów zdalnych, jak i klienckich, my potrzebne są prawa roota po obu stronach.
PermitRootLogin yes
PermitTunnel yes
Następnie nawiążemy połączenie ssh za pomocą parametru żądającego inicjalizacji urządzeń tun.
localhost:~# ssh -v -w any root@remoteserver
Powinniśmy teraz mieć urządzenie tun podczas pokazywania interfejsów (# ip a). Następny krok doda adresy IP do interfejsów tunelu.
Strona klienta SSH:
localhost:~# ip addr add 10.10.10.2/32 peer 10.10.10.10 dev tun0
localhost:~# ip tun0 up
Po stronie serwera SSH:
remoteserver:~# ip addr add 10.10.10.10/32 peer 10.10.10.2 dev tun0
remoteserver:~# ip tun0 up
Teraz mamy bezpośrednią trasę do innego hosta (route -n и ping 10.10.10.10).
Możesz przekierować dowolną podsieć przez hosta po drugiej stronie.
localhost:~# route add -net 10.10.10.0 netmask 255.255.255.0 dev tun0
Po stronie zdalnej musisz włączyć ip_forward и iptables.
Bum! VPN przez tunel SSH w warstwie sieci 3. Teraz to jest zwycięstwo.
Jeśli wystąpią jakiekolwiek problemy, użyj tcpdump и pingaby ustalić przyczynę. Ponieważ gramy w warstwie 3, nasze pakiety icmp będą przechodzić przez ten tunel.
7. Skopiuj klucz SSH (ssh-copy-id)
Można to zrobić na kilka sposobów, ale to polecenie oszczędza czas, ponieważ nie kopiuje plików ręcznie. Po prostu kopiuje ~/.ssh/id_rsa.pub (lub klucz domyślny) z twojego systemu do ~/.ssh/authorized_keys na zdalnym serwerze.
localhost:~$ ssh-copy-id user@remoteserver
8. Zdalne wykonywanie poleceń (nieinteraktywne)
zespół ssh Można go połączyć z innymi poleceniami w celu uzyskania wspólnego, przyjaznego dla użytkownika interfejsu. Po prostu dodaj polecenie, które chcesz uruchomić na zdalnym hoście, jako ostatni parametr w cudzysłowie.
W tym przykładzie grep wykonywane w systemie lokalnym po pobraniu logu poprzez kanał ssh. Jeśli plik jest duży, wygodniej jest go uruchomić grep po stronie zdalnej, po prostu umieszczając oba polecenia w cudzysłowie.
Inny przykład spełnia tę samą funkcję co ssh-copy-id z przykładu 7.
9. Zdalne przechwytywanie i przeglądanie pakietów w Wireshark
Wziąłem jednego z naszych przykłady tcpdump. Użyj go do zdalnego przechwytywania pakietów i wyświetlania wyników bezpośrednio w lokalnym interfejsie GUI Wireshark.
:~$ ssh root@remoteserver 'tcpdump -c 1000 -nn -w - not port 22' | wireshark -k -i -
10. Kopiowanie folderu lokalnego na zdalny serwer przez SSH
Niezła sztuczka, która kompresuje folder za pomocą bzip2 (jest to opcja -j w poleceniu tar), a następnie pobiera strumień bzip2 z drugiej strony, tworząc zduplikowany folder na serwerze zdalnym.
Jeśli X jest zainstalowany na kliencie i zdalnym serwerze, możesz zdalnie wykonać polecenie GUI z oknem na lokalnym pulpicie. Ta funkcja jest dostępna od dawna, ale nadal jest bardzo przydatna. Uruchom zdalną przeglądarkę internetową lub nawet konsolę VMWawre Workstation, tak jak w tym przykładzie.
localhost:~$ ssh -X remoteserver vmware
Wymagany ciąg X11Forwarding yes w pliku sshd_config.
12. Zdalne kopiowanie plików przy użyciu rsync i SSH
rsync o wiele wygodniejsze scp, jeśli potrzebujesz okresowych kopii zapasowych katalogu, dużej liczby plików lub bardzo dużych plików. Dostępna jest funkcja odzyskiwania po niepowodzeniu transferu i kopiowania tylko zmienionych plików, co oszczędza ruch i czas.
W tym przykładzie zastosowano kompresję gzip (-z) i tryb archiwizacji (-a), który umożliwia kopiowanie rekurencyjne.
Torsy użyje portu 9050 na serwerze lokalnym dla serwera proxy. Jak zawsze, używając Tora, musisz poważnie sprawdzić, jaki ruch jest tunelowany i inne problemy związane z bezpieczeństwem operacyjnym (opsec). Gdzie idą Twoje zapytania DNS?
14. SSH do instancji EC2
Aby połączyć się z instancją EC2, potrzebujesz klucza prywatnego. Pobierz go (rozszerzenie .pem) z panelu sterowania Amazon EC2 i zmień uprawnienia (chmod 400 my-ec2-ssh-key.pem). Trzymaj klucz w bezpiecznym miejscu lub umieść go we własnym folderze ~/.ssh/.
Parametr -i po prostu mówi klientowi ssh, aby użył tego klucza. Plik ~/.ssh/config Idealny do automatycznego konfigurowania użycia kluczy podczas łączenia się z hostem ec2.
Host my-ec2-public
Hostname ec2???.compute-1.amazonaws.com
User ubuntu
IdentityFile ~/.ssh/my-ec2-key.pem
15. Edycja plików tekstowych za pomocą VIM-a poprzez ssh/scp
Dla wszystkich miłośników vim Ta wskazówka pozwoli zaoszczędzić trochę czasu. Używając vim pliki są edytowane za pomocą scp za pomocą jednego polecenia. Ta metoda po prostu tworzy plik lokalnie w /tmpa następnie kopiuje go z powrotem po zapisaniu vim.
localhost:~$ vim scp://user@remoteserver//etc/hosts
Uwaga: format różni się nieco od zwykłego scp. Po gospodarzu mamy dublet //. Jest to bezwzględne odniesienie do ścieżki. Jeden ukośnik będzie wskazywał ścieżkę względem folderu domowego users.
Jeśli widzisz ten błąd, sprawdź dokładnie format polecenia. Zwykle oznacza to błąd składniowy.
16. Montowanie zdalnego SSH jako folderu lokalnego za pomocą SSHFS
Za pomocą sshfs - klient systemu plików ssh - możemy połączyć katalog lokalny ze zdalną lokalizacją ze wszystkimi interakcjami z plikami w szyfrowanej sesji ssh.
localhost:~$ apt install sshfs
Zainstaluj pakiet na Ubuntu i Debianie sshfs, a następnie po prostu zamontuj zdalną lokalizację w naszym systemie.
Domyślnie, jeśli istnieje połączenie ze zdalnym serwerem za pomocą ssh drugie połączenie za pomocą ssh lub scp ustanawia nową sesję z dodatkowym uwierzytelnieniem. Opcja ControlPath umożliwia wykorzystanie istniejącej sesji do wszystkich kolejnych połączeń. To znacznie przyspieszy proces: efekt jest zauważalny nawet w sieci lokalnej, a tym bardziej przy łączeniu się z zasobami zdalnymi.
Host remoteserver
HostName remoteserver.example.org
ControlMaster auto
ControlPath ~/.ssh/control/%r@%h:%p
ControlPersist 10m
ControlPath określa gniazdo do sprawdzania nowych połączeń i sprawdzania, czy istnieje aktywna sesja ssh. Ostatnia opcja powoduje, że nawet po wyjściu z konsoli dotychczasowa sesja pozostanie otwarta przez 10 minut, więc w tym czasie będzie można ponownie połączyć się na istniejącym gnieździe. Więcej informacji znajdziesz w pomocy. ssh_config man.
18. Przesyłaj strumieniowo wideo przez SSH przy użyciu VLC i SFTP
Nawet długoletni użytkownicy ssh и vlc (Video Lan Client) nie zawsze są świadomi tej wygodnej opcji, gdy naprawdę potrzebujesz oglądać wideo przez sieć. W ustawieniach Plik | Otwórz strumień sieciowy программы vlc możesz wprowadzić lokalizację jako sftp://. Jeśli wymagane jest hasło, pojawi się monit.
sftp://remoteserver//media/uploads/myvideo.mkv
19. Uwierzytelnianie dwuskładnikowe
W przypadku usługi SSH obowiązuje to samo uwierzytelnianie dwuskładnikowe, co Twoje konto bankowe lub konto Google.
Oczywiście ssh początkowo posiada funkcję uwierzytelniania dwuskładnikowego, co oznacza hasło i klucz SSH. Zaletą tokena sprzętowego lub aplikacji Google Authenticator jest to, że zwykle jest to inne urządzenie fizyczne.
Jeśli segmentacja sieci oznacza, że musisz przeskakiwać przez wiele hostów ssh, aby dostać się do docelowej sieci docelowej, skrót -J pozwoli Ci zaoszczędzić czas.
Najważniejszą rzeczą do zrozumienia jest to, że nie jest to to samo, co polecenie ssh host1, a następnie user@host1:~$ ssh host2 itd. Opcja -J sprytnie wykorzystuje przekazywanie, aby zmusić hosta lokalnego do ustanowienia sesji z następnym hostem w łańcuchu. Zatem w powyższym przykładzie nasz host lokalny jest uwierzytelniany na serwerze Host4. Oznacza to, że używane są nasze klucze localhost, a sesja od localhost do host4 jest całkowicie szyfrowana.
Za taką możliwość w ssh_config określ opcję konfiguracji Skok proxy. Jeśli regularnie musisz przeglądać kilka hostów, automatyzacja konfiguracji pozwoli zaoszczędzić dużo czasu.
21. Blokuj próby brutalnej siły SSH przy użyciu iptables
Każdy, kto zarządzał usługą SSH i przeglądał logi, wie, ile prób użycia siły ma miejsce w każdej godzinie każdego dnia. Szybkim sposobem na zmniejszenie szumu w logach jest przeniesienie SSH na niestandardowy port. Wprowadź zmiany w pliku sshd_config poprzez parametr konfiguracyjny Port##.
Z iptables Możesz także łatwo zablokować próby połączenia się z portem po osiągnięciu określonego progu. Łatwym sposobem na to jest użycie OSSEC, ponieważ nie tylko blokuje SSH, ale wykonuje szereg innych działań związanych z wykrywaniem włamań na podstawie nazwy hosta (HIDS).
22. SSH Escape, aby zmienić przekierowanie portów
I nasz ostatni przykład ssh zaprojektowany do zmiany przekierowania portów w locie w ramach istniejącej sesji ssh. Wyobraź sobie taki scenariusz. Jesteś głęboko w sieci; może przeskoczyłem ponad pół tuzina hostów i potrzebowałem lokalnego portu na stacji roboczej, który byłby przekazywany do Microsoft SMB starego systemu Windows 2003 (ktoś pamięta ms08-67?).
Kliknięcie enter, spróbuj wpisać w konsoli ~C. Jest to sekwencja kontroli sesji, która umożliwia wprowadzanie zmian w istniejącym połączeniu.
Tutaj możesz zobaczyć, że przekierowaliśmy nasz lokalny port 1445 do hosta Windows 2003, który znaleźliśmy w sieci wewnętrznej. Teraz po prostu biegnij msfconsolei możesz przejść dalej (zakładając, że planujesz używać tego hosta).
Ukończenie
Te przykłady, wskazówki i polecenia ssh powinien dać punkt wyjścia; Więcej informacji na temat każdego polecenia i możliwości można znaleźć na stronach podręcznika (man ssh, man ssh_config, man sshd_config).
Zawsze fascynowała mnie możliwość dostępu do systemów i wykonywania poleceń w dowolnym miejscu na świecie. Rozwijając swoje umiejętności za pomocą narzędzi takich jak ssh staniesz się bardziej skuteczny w każdej grze, w którą grasz.