W tym artykule opisano nasze najlepsze praktyki dotyczące efektywniejszego korzystania z protokołu SSH. Dowiesz się z niego jak:
- Dodaj drugi czynnik do logowania SSH
- Bezpiecznie korzystaj z przesyłania agentów
- Wyloguj się z przerwanej sesji SSH
- Pozostaw trwały terminal otwarty
- Udostępnij zdalną sesję terminala znajomemu (bez Zoomu!)
Dodanie drugiego czynnika do SSH
Możesz dodać drugi czynnik uwierzytelniania do połączeń SSH na pięć różnych sposobów:
- Zaktualizuj OpenSSH i użyj klucza szyfrowania. W lutym 2020 r. OpenSSH dodał obsługę kluczy szyfrowania FIDO U2F (Universal Second Factor). To świetna nowa funkcja, ale jest jedno zastrzeżenie: tylko ci klienci i serwery, które zaktualizowały OpenSSH do wersji 8.2 lub nowszej, będą mogły używać kluczy szyfrowania, ponieważ lutowa aktualizacja wprowadza dla nich nowe typy kluczy. Zespół
ssh –Vmożesz sprawdzić wersję klienta SSH i wersję serwera za pomocą polecenianc [servername] 22
Do wersji lutowej dodano dwa nowe typy kluczy - ecdsa-sk i ed25519-sk (wraz z odpowiednimi certyfikatami). Aby wygenerować plik klucza, po prostu włóż klucz szyfrujący i uruchom polecenie:$ ssh-keygen -t ecdsa-sk -f ~/.ssh/id_ecdsa_skWygeneruje klucze publiczne i prywatne i powiąże je z Twoim urządzeniem U2F. Zadaniem tajnego klucza na urządzeniu U2F jest odszyfrowanie deskryptora tajnego klucza na dysku, gdy klucz szyfrowania jest aktywowany.
Dodatkowo, jako czynnik drugorzędny, możesz podać hasło do swoich kluczy.
Klucz rezydentny to inny typ generowania klucza -sk obsługiwany przez OpenSSH. Dzięki takiemu podejściu uchwyt jest przechowywany na urządzeniu U2F i pozwala mieć go wraz z kluczem szyfrującym, gdy zajdzie taka potrzeba. Możesz utworzyć klucz rezydentny za pomocą polecenia:
$ ssh-keygen -t ecdsa-sk -O resident -f ~/.ssh/id_ecdsa_skNastępnie, aby umieścić uchwyt z powrotem w pamięci nowego urządzenia, wklej klucz szyfrujący i uruchom polecenie:
$ ssh-add -KPodczas łączenia się z hostem nadal będziesz musiał aktywować klucz szyfrowania.
- Użyj PIV+PKCS11 i Yubikey. Łączenie się z urządzeniami z wcześniejszymi wersjami dysku SSHD przy użyciu klucza szyfrowania będzie wymagało innego podejścia. Yubico ma przewodnik na temat używania U2F+SSH z PIV/PKCS11. To nie to samo, co FIDO U2F i chociaż metoda działa, ustalenie, jaka magia nią kieruje, wymaga dużo pracy.
- Zastosuj niestandardowego agenta ssh yubikey-agent. Filippo Valsorda napisał agenta SSH dla Yubikeys. Jest całkowicie nowy i zawiera minimalne funkcje.
- Użyj Touch ID i sekey. Sekey to agent SSH typu open source, który przechowuje klucze prywatne w bezpiecznej enklawie na komputerze Mac i umożliwia użycie Touch ID w celu zapewnienia dostępu.
- Użyj pojedynczego logowania na SSH. Napisałem samouczek, który pomoże Ci skonfigurować tę metodę. Jedną z zalet pojedynczego logowania w SSH jest możliwość wykorzystania zasad bezpieczeństwa dostawcy tożsamości, w tym obsługi uwierzytelniania wieloskładnikowego (MFA).
Bezpieczne korzystanie ze spedycji agentowej
Przekazywanie agenta SHH umożliwia zdalnemu hostowi dostęp do agenta SSH na Twoim urządzeniu lokalnym. Kiedy używasz protokołu SSH z włączonym przekazywaniem agentów (zwykle poprzez ssh -A), w połączeniu będą dwa kanały: sesja interaktywna i kanał do przekazywania agentów. Za pośrednictwem tego kanału gniazdo Unix utworzone przez lokalnego agenta SSH łączy się ze zdalnym hostem. Jest to ryzykowna metoda, ponieważ użytkownik z uprawnieniami administratora na zdalnym urządzeniu może uzyskać dostęp do lokalnego agenta SSH i potencjalnie podszyć się pod Ciebie online. Używając standardowego agenta SSH z zestawu Open SSH, nawet nie będziesz wiedział, że tak się stało. Posiadanie klucza U2F (lub Sekey) pomoże Ci skutecznie zablokować wszelkie próby użycia agenta SSH z zewnątrz.
Nawet przy zastosowaniu takich środków ostrożności dobrze jest jak najrzadziej korzystać z przekierowań agentów. Nie powinieneś go używać przy każdej sesji - korzystaj z przekazywania agentów tylko wtedy, gdy masz pewność, że jest ono potrzebne w bieżącej sesji.
Wychodzenie z zawieszonej sesji
Przerwa w sieci, programy zachowujące się poza kontrolą lub sekwencja ucieczki blokująca wprowadzanie danych z klawiatury to możliwe przyczyny zakończenia sesji SSH.
Istnieje kilka sposobów zakończenia zawieszonej sesji:
- Automatycznie wyjdź, gdy sieć zostanie przerwana. Musisz dodać następujące elementy do swojego .ssh/config:
ServerAliveInterval 5 ServerAliveCountMax 1ssh będzie wysyłał echo do zdalnego hosta co każdą sekundę ServerAliveInterval, aby sprawdzić połączenie. Jeśli więcej ech niż ServerAliveCountMax nie otrzyma odpowiedzi, ssh przekroczy limit czasu połączenia i zakończy sesję.
- Wyjdź z sesji. ssh domyślnie używa znaku ~ (tyldy) jako znaku kontrolnego. Zespół ~. zamyka otwarte połączenie i wraca do terminala. (Sekwencje ucieczki można wprowadzić tylko w nowej linii.) Znak ~? wyświetli pełną listę poleceń dostępnych w tej sesji. Pamiętaj, że aby wpisać znak ~ na klawiaturze międzynarodowej, konieczne może być dwukrotne naciśnięcie klawisza ~.
Dlaczego w ogóle zdarzają się zamrożone sesje? Kiedy powstał Internet, komputery rzadko przenosiły się z miejsca na miejsce. Kiedy korzystasz z laptopów i przełączasz się między wieloma sieciami Wi-Fi IPv4, Twój adres IP ulega zmianie. Ponieważ protokół SSH opiera się na połączeniach TCP, które z kolei opierają się na punkcie końcowym ze stabilnym adresem IP, za każdym razem, gdy przełączasz się między sieciami, połączenia SSH tracą uchwyt gniazda i zostają faktycznie utracone. Gdy zmienia się Twój adres IP, wykrycie utraty uchwytu przez stos sieciowy zajmuje trochę czasu. Gdy wystąpią problemy z siecią, nie chcemy, aby jeden z węzłów połączenia TCP zakończył je zbyt wcześnie. Dlatego protokół będzie próbował ponownie wysłać dane jeszcze kilka razy, zanim w końcu się podda. Tymczasem w terminalu sesja będzie wyglądać na zamrożoną. IPv6 dodaje kilka funkcji związanych z mobilnością, które pozwalają urządzeniu zachować adres domowy podczas zmiany sieci. Być może pewnego dnia nie będzie to już takim problemem.
Jak utrzymać stały terminal otwarty na zdalnym hoście
Istnieją dwa różne podejścia do utrzymywania połączenia w przypadku przemieszczania się między różnymi sieciami lub chęci rozłączenia się na jakiś czas.
1. Skorzystaj lub
Jeśli naprawdę potrzebujesz połączenia, które nie zrywa się nawet podczas przełączania między sieciami, użyj mobilnej powłoki Mosh. Jest to bezpieczna powłoka, która najpierw wykorzystuje uzgadnianie SSH, a następnie na czas sesji przełącza się na własny zaszyfrowany kanał. W ten sposób Mosh tworzy osobny, bardzo trwały i bezpieczny kanał, który wytrzyma przerwy w Internecie, zmianę adresu IP laptopa, poważne awarie sieci i wiele więcej, a wszystko to także dzięki magii połączeń UDP jako protokół synchronizacji Mosh.
Aby korzystać z Mosha, musisz zainstalować go zarówno na kliencie, jak i na serwerze oraz otworzyć porty 60000-61000 dla niepołączonego ruchu UPD do zdalnego hosta. W przyszłości wystarczy go podłączyć, aby go użyć mosh user@server.
Mosh działa na poziomie ekranów i naciśnięć klawiszy, co daje mu szereg zalet w porównaniu z przesyłaniem binarnego strumienia standardowego wejścia i wyjścia pomiędzy klientem a serwerem SSH. Jeśli potrzebujemy tylko zsynchronizować ekrany i naciśnięcia klawiszy, późniejsze przywrócenie zerwanego połączenia stanie się znacznie łatwiejsze. Podczas gdy SSH będzie buforować i wysyłać wszystko, co się wydarzyło, Mosh musi jedynie buforować naciśnięcia klawiszy i synchronizować ostatnią klatkę okna terminala z klientem.
2. Użyj tmuxa
Jeśli chcesz „przychodzić i odchodzić, jak chcesz” i utrzymywać sesję terminalową na zdalnym hoście, użyj tmux. Uwielbiam tmux i używam go cały czas. Jeśli Twoje połączenie SSH zostanie przerwane, aby powrócić do sesji tmux, wystarczy ponownie połączyć się i wejść tmux attach. Ponadto ma tak wspaniałe funkcje, jak zakładki i panele wewnątrz terminala, podobne do zakładek w terminalu iOS oraz możliwość udostępniania terminali innym osobom.
Niektórzy lubią udoskonalać swój tmux za pomocą Byobu, pakietu, który znacząco poprawia użyteczność tmux i dodaje wiele skrótów klawiaturowych. Byobu zawiera Ubuntui jest łatwy do zainstalowania na komputerze Mac za pomocą Homebrew.
Udostępnianie sesji terminala zdalnego znajomemu
Czasami podczas debugowania złożonych problemów na serwerach możesz chcieć udostępnić sesję SSH komuś, kto nie jest w tym samym pokoju co Ty. tmux jest idealny do tego zadania! Wystarczy kilka kroków:
- Upewnij się, że tmux jest zainstalowany w węźle bastionowym lub na dowolnym serwerze, z którym będziesz pracować.
- Oboje będziecie musieli połączyć się przez SSH z urządzeniem przy użyciu tego samego konta.
- Aby rozpocząć sesję tmux, jeden z was musi używać tmux.
- Drugi powinien uruchomić tmux connect
- Voila! Masz wspólny terminal.
Jeśli potrzebujesz bardziej wyrafinowanych sesji tmux dla wielu użytkowników, wypróbuj tmate, rozwidlenie tmux, które znacznie ułatwia wspólne sesje terminalowe.
Źródło: www.habr.com
