Tutoriel Linux

Skonfiguruj SSH na Linuksie dla swoich serwerów bez konieczności przepisywania wszystkiego

Débutant4 min de lecture

Kiedy zarządzasz wieloma maszynami, te same opcje SSH szybko trafiają do historii: użytkownik, port, klucz prywatny, a czasami skok. Plik ~/.ssh/config zastępuje tę niekończącą się linię krótką nazwą, na przykład ssh preprod.

Nie musisz modyfikować serwera. Ta konfiguracja żyje na twoim komputerze i wskazuje klientowi OpenSSH, jak połączyć się z każdą maszyną. Przede wszystkim zapobiega to używaniu niewłaściwego klucza lub portu, gdy kilka środowisk wygląda podobnie.

Utwórz wpis dla każdego serwera

Stwórz folder, jeśli jeszcze nie istnieje, a następnie otwórz plik konfiguracyjny:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/config

Następnie dodaj blok dla każdej maszyny. Tutaj preprod jest tylko aliasem lokalnym. Zastąp adres, konto, port i ścieżkę do klucza swoimi wartościami.

Host preprod
    HostName 192.0.2.44
    User admin
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_preprod
    IdentitiesOnly yes

Teraz możesz uruchomić ssh preprod. HostName zawiera prawdziwą nazwę DNS lub adres IP, User to zdalne konto, a Port to port SSH. IdentityFile wybiera oczekiwany klucz prywatny. Używając IdentitiesOnly yes, klient nie proponuje wszystkich kluczy załadowanych przez twój agent SSH, co zapobiega zbędnym próbom na serwerze ograniczającym autoryzacje.

Jeśli już używasz klucza, upewnij się najpierw, że jest odpowiednio chroniony. Klucz prywatny nie powinien być czytelny dla innych kont na twoim komputerze:

chmod 600 ~/.ssh/id_ed25519_preprod
chmod 600 ~/.ssh/config

Przewodnik dotyczący generowania klucza SSH na Ubuntu opisuje, jak utworzyć parę kluczy. Nigdy nie kopiuj klucza prywatnego na serwer. Tylko klucz publiczny powinien znajdować się w ~/.ssh/authorized_keys po stronie zdalnej.

Dodaj wspólne ustawienia na końcu pliku

Plik config może zawierać wiele bloków Host. Klient OpenSSH przyjmuje pierwszą znalezioną wartość dla większości opcji. Umieść więc najbardziej szczegółowe serwery na górze, a ogólne wartości na końcu.

Host production
    HostName prod.example.net
    User deploy
    IdentityFile ~/.ssh/id_ed25519_production
    IdentitiesOnly yes

Host sauvegarde
    HostName backup.example.net
    User backup
    Port 2201
    IdentityFile ~/.ssh/id_ed25519_backup
    IdentitiesOnly yes

Host *
    ServerAliveInterval 30
    ServerAliveCountMax 3

Blok Host * ma zastosowanie do wszystkich aliasów. Odpowiada on naprawdę wspólnym ustawieniom, tutaj okresowemu wysyłaniu sygnału w celu wykrycia zawieszonego połączenia. Unikaj umieszczania w nim klucza lub użytkownika, jeśli twoje serwery nie korzystają ze wspólnego konta.

Możesz również grupować hosty, które podążają za tą samą zasadą, używając wzoru takiego jak Host *.intra. Zachowaj wyjątki powyżej tego bloku. Ambitny alias lub ogólna zasada umieszczona zbyt wcześnie często powoduje zaskakujące zachowanie.

Sprawdź konfigurację przed połączeniem

Następujące polecenie wyświetla ostateczną skonfigurowaną konfigurację dla aliasu, bez otwierania sesji. Jest bardzo przydatne po wprowadzeniu zmian:

ssh -G preprod | grep -E '^(hostname|user|port|identityfile|identitiesonly) '

Upewnij się, że hostname, user i port odpowiadają właściwej maszynie. Sprawdź też zwróconą ścieżkę dla identityfile. Jeśli właśnie przeniosłeś klucz, SSH może nadal wskazywać na stary plik.

Następnie wykonaj prosty test:

ssh preprod
ssh -v preprod

Opcja -v wyświetla kroki połączenia i odczytane pliki konfiguracyjne. Nie publikuj tej wyjściowej wiadomości w takiej formie w zgłoszeniu lub czacie: może ujawniać twoje nazwy hostów, konta i ścieżki lokalne.

Kiedy plik конфигурации nie wystarcza

Alias SSH rozwiązuje powtarzalność opcji. Nie naprawia serwera, który odrzuca twój klucz, zamkniętego portu lub zmienionego odcisku hosta. Jeśli autoryzacja często wymaga ponownego wprowadzenia hasła, użyj ssh-agent, zamiast usuwać hasło z klucza.

Aby uzyskać dostęp do lokalnej usługi przez bastion, zachowaj osobny wpis z ProxyJump i testuj ją oddzielnie. Tunel SSH odpowiada na inne potrzeby: transportuje lokalny lub zdalny port, nie zastępuje konfiguracji hosta.

  • Chroń ~/.ssh za pomocą chmod 700 ~/.ssh.
  • Chroń plik config oraz każdy klucz prywatny za pomocą chmod 600.
  • Sprawdź alias za pomocą ssh -G nom_alias przed pierwszym połączeniem.
  • Testuj każdy nowy serwer z jego aliasem, a następnie zachowaj wspólne opcje w bloku Host * umieszczonym na końcu pliku.

Oficjalna dokumentacja ssh_config(5) szczegółowo opisuje każdą dyrektywę. Poświęć dwie minuty na przegląd wyników ssh -G przed użyciem aliasu na maszynie produkcyjnej: to szybsze niż szukanie przyczyny, dla której SSH wybrało niewłaściwy klucz.

Komputer Linux podłączony do wielu serwerów w celu konfiguracji SSH
Lokalna konfiguracja SSH pozwala na dołączenie do każdego serwera za pomocą dedykowanego aliasu.
sudo apt update && sudo apt upgrade