Jeśli używasz klucza SSH chronionego hasłem, prawdopodobnie znasz ten problem: jest to bezpieczne, ale szybko staje się uciążliwe, gdy musisz wpisywać hasło za każdym razem, gdy się łączysz lub… git, pociągnijNieprawidłową odpowiedzią jest usunięcie hasła z klucza. W wielu przypadkach najlepszą odpowiedzią jest… agent ssh.
agent ssh Zapisuje odblokowany klucz w pamięci na czas sesji. Wpisujesz hasło raz, a następnie agent odpowiada na żądania SSH. Jest to wygodne, ale wymaga dwóch środków ostrożności: sprawdzenia, który agent jest używany, oraz ograniczenia czasu działania podczas pracy na komputerze współdzielonym lub serwerze administracyjnym.

Sprawdź, czy ssh-agent jest już uruchomiony
W wielu dystrybucjach Linuksa z interfejsem graficznym agent SSH jest już uruchomiony. W czystym SSH, na serwerze lub w minimalnej sesji nie zawsze tak jest. Zacznij od sprawdzenia zmiennej środowiskowej używanej przez narzędzia SSH:
echo "$SSH_AUTH_SOCK"
Jeśli dane wyjściowe są puste, powłoka nie wie, z którym agentem ma się komunikować. Możesz również sprawdzić klucze, które zostały już załadowane:
ssh-add -l
Jeśli otrzymasz wiadomość taką jak Agent nie ma żadnych tożsamościAgent odpowiada poprawnie, ale żaden klucz nie został załadowany. Jeśli polecenie informuje, że nie można połączyć się z agentem, należy go uruchomić.
Uruchom ssh-agent w swojej sesji
Aby uruchomić agenta w bieżącej powłoce, użyj:
eval "$(ssh-agent -s)"
Polecenie definiuje niezbędne zmienne, w tym: SSH_AUTH_SOCK I SSH_AGENT_PID. Bez ocenaAgent może się uruchomić, ale powłoka nie pobiera prawidłowo danych ze środowiska. To właśnie takie szczegóły marnują czas, gdy testujesz zbyt szybko.
Możesz to potwierdzić zaraz potem:
echo "$SSH_AUTH_SOCK"
Na komputerze osobistym to często wystarcza. Na serwerze współdzielonym wolę unikać pozostawiania agenta otwartego przez cały dzień bez limitu czasowego.
Dodaj klucz SSH o ograniczonym okresie ważności
Aby załadować standardowy dysk USB:
ssh-add ~/.ssh/id_ed25519
Hasło wprowadza się raz. Następnie połączenia używające tego klucza przechodzą przez agenta. Aby sprawdzić, co jest załadowane:
ssh-add -l -E sha256
Aby ograniczyć czas życia klucza w agencie, użyj -TPrzykład z jedną godziną:
ssh-add -t 1h ~/.ssh/id_ed25519
To moje preferowane ustawienie na stacji roboczej administratora. Zachowuje się wygodę agenta, ale klucz nie pozostaje dostępny na zawsze, jeśli zapomni się wylogować.
Testowanie połączenia bez ponownego wprowadzania hasła
Po załadowaniu klucza przetestuj normalne połączenie:
użytkownik ssh@serwer
Jeśli klucz jest zgodny z serwerem, SSH nie będzie ponownie pytać o hasło. Jeśli się nie uda, spróbuj ponownie w trybie opisowym:
ssh -v użytkownik@serwer
Zobaczysz, jaki klucz jest oferowany, czy agent odpowiada i gdzie połączenie jest blokowane. Jeśli problem jest bardziej prawdopodobny w przypadku usługi SSH po stronie serwera, opublikowałem również odpowiedni poradnik. restart SSH w Ubuntu w sposób czysty i drugi za Zainstaluj ponownie SSH, gdy przestanie odpowiadać.
Wyjmij klucze z agenta
Aby usunąć konkretny klucz:
ssh-add -d ~/.ssh/id_ed25519
Aby opróżnić wszystkie załadowane klucze:
ssh-add -D
Jeśli uruchomiłeś agenta ręcznie i chcesz go zatrzymać:
ssh-agent -k
Nie należy mylić tych poleceń z usuwaniem pliku klucza w ~/.sshW tym przypadku usuwasz jedynie klucz z pamięci agenta.
Zachowaj ostrożność podczas przesyłania agentów SSH
Transfer agenta, często aktywowany za pomocą ssh -APozwala to zdalnemu komputerowi używać lokalnego agenta do przekierowania ruchu na inny serwer. Jest to przydatne w niektórych środowiskach, ale domyślnie unikałbym tego rozwiązania.
Jeśli serwer pośredniczący zostanie naruszony, Twój klucz prywatny nie zostanie skopiowany, ale dostęp do agenta będzie nadal możliwy, gdy sesja będzie otwarta. W przypadku hosta bastionowego lub maszyny, nad którą nie masz pełnej kontroli, wybierz klucz dedykowany, klucz o ograniczonym czasie trwania lub bardziej rygorystyczną konfigurację SSH.
Aby utrzymać długą sesję bez utraty pracy, ekran pod Linuksem zaspokaja inną potrzebę: utrzymywanie otwartej sesji administratora po stronie serwera. Nie zastępuje to agent sshale te dwa narzędzia dobrze się uzupełniają.
Kompromis, który bym utrzymał
agent ssh, sprawdź aktywne klucze za pomocą ssh-add -logranicz czas trwania za pomocą ssh-add -t jeśli kontekst jest wrażliwy, wówczas na końcu interwencji należy opróżnić agenta.
Strony podręcznika agent ssh, ssh-add I ssh Szczegółowo opisują dostępne opcje. Nie trzeba pamiętać wszystkiego. Ważne jest, aby mieć bezpieczny klucz, ale taki, którego można używać bez zamieniania każdego połączenia w uciążliwy obowiązek.