Pierwsze logowanie na serwer
4 zadania do wykonania na emulowanej maszynie.
Kursy SSH od zera do bastionuSSH: zdalna powłoka bez tajemnic
SSH (Secure Shell) to nie jest po prostu "narzędzie do wpisywania komend na zdalnym komputerze". Dla DevOpsa to fundament. To Twój jedyny bezpieczny kanał komunikacji z infrastrukturą – od pojedynczych instancji w chmurze, przez kontenery, aż po zarządzanie bastionami (jump hostami). Jeśli SSH zawiedzie lub zostanie źle skonfigurowane, tracisz kontrolę nad systemem, a w najgorszym scenariuszu – otwierasz drzwi do przejęcia całej sieci.
Kiedy wpisujesz komendę ssh user@192.168.1.50, nie nawiązujesz bezpośredniego połączenia z powłoką (shell). Najpierw budujesz bezpieczny, zaszyfrowany tunel. Proces ten dzieli się na dwa kluczowe etapy: uwierzytelnienie serwera oraz uwierzytelnienie użytkownika.
Przy pierwszym połączeniu z nową maszyną zobaczysz komunikat:
The authenticity of host '192.168.1.50 (192.168.1.50)' can't be established. ECDSA key fingerprint is SHA256:abc123xyz... Are you sure you want to continue connecting (yes/no/[fingerprint])?
To jest moment krytyczny. Jeśli to Twoja własna, nowa maszyna – wpisujesz yes. Twój klient zapisuje ten fingerprint w pliku ~/.ssh/known_hosts. Dzięki temu przy kolejnym logowaniu SSH nie będzie pytać o zgodę, lecz automatycznie sprawdzi, czy klucz serwera się zgadza.
Pułapka produkcyjna: Reinstalacja serwera.
Wyobraź sobie, że automatyzujesz infrastrukturę (np. przez Terraform). Usuwasz starą instancję i stawiasz nową z tym samym adresem IP. Przy próbie połączenia SSH wyrzuci potężny błąd:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
To nie jest błąd połączenia – to system bezpieczeństwa. SSH wykryło, że maszyna pod tym adresem ma inny klucz niż ta, którą zapisałeś wcześniej. W środowisku produkcyjnym nie ignoruj tego. Jeśli to spodziewana zmiana (reinstalacja), musisz usunąć stary wpis komendą ssh-keygen -R [adres_IP]. Jeśli to nieplanowana zmiana – prawdopodobnie ktoś właśnie próbuje przejąć Twoją sesję.
Po poprawnym uwierzytelnieniu Twój prompt zmieni się. Zamiast user@laptop, zobaczysz np. root@server-prod. Od tej chwili każda komenda, którą wpiszesz, jest wykonywana na zdalnej maszynie.
# Przykład typowej sesji
user@laptop:~$ ssh admin@192.168.1.50
admin@192.168.1.50:~$ uptime
14:20:05 up 45 days, 12:34, 1 user, load average: 0.01, 0.05, 0.00
admin@192.168.1.50:~$ exit
logout
user@laptop:~$
Zawsze pamiętaj o komendzie exit lub skrócie Ctrl+D. Pozostawianie otwartych, nieużywanych sesji SSH na serwerach produkcyjnych to proszenie się o kłopoty (niepotrzebne zużycie zasobów i większa powierzchnia ataku).
Jako DevOps nie możesz zgadywać, dlaczego "nie działa". Musisz czytać komunikaty. SSH podaje bardzo precyzyjne informacje, które pozwalają błyskawicznie odróżnić problem sieciowy od problemu z uprawnieniami.
Connection refusedConnection timed outiptables lub ufw) blokuje ruch na porcie 22, albo adres IP jest błędny/maszyna jest wyłączona.Permission denied (publickey,password)SSH jest skrajnie paranoiczne w kwestii bezpieczeństwa. Jeśli w kolejnych lekcjach zaczniesz używać kluczy (a będziemy to robić), pamiętaj o jednej złotej zasadzie: SSH nie zadziała, jeśli Twoje pliki konfiguracyjne są zbyt "otwarte" dla innych użytkowników.
Jeśli ustawisz uprawnienia do swojego katalogu .ssh na 777 (każdy może czytać i pisać) lub klucza prywatnego na 644 (klucz jest czytelny dla grupy i innych), SSH po prostu odmówi połączenia, uznając, że Twoje poświadczenia są skompromitowane. W świecie SSH zbyt luźne uprawnienia to błąd krytyczny, a nie tylko "zła praktyka".
Zasada do zapamiętania: W SSH nie ma miejsca na kompromisy w kwestii uprawnień – jeśli system jest zbyt "dostępny" dla innych, SSH odetnie Ci drogę do celu, by chronić Twoje dane.
4 zadania do wykonania na emulowanej maszynie.