Problem: Mam około 20-30 ssh-agent
tożsamości. Większość serwerów odmawia uwierzytelnienia Too many failed authentications
, ponieważ SSH zwykle nie pozwala mi wypróbować 20 różnych kluczy, aby się zalogować.
W tej chwili jestem ręcznie określając plik tożsamości dla każdego hosta, przy użyciu IdentityFile
, a IdentitiesOnly
dyrektywy, tak że SSH będzie próbował jeden plik klucza, który działa tylko.
Niestety przestaje to działać, gdy oryginalne klucze nie będą już dostępne. ssh-add -l
pokazuje mi poprawne ścieżki dla każdego pliku klucza i pasują do ścieżek w .ssh/config
, ale to nie działa. Najwyraźniej SSH wybiera wcięcie według podpisu klucza publicznego, a nie według nazwy pliku, co oznacza, że oryginalne pliki muszą być dostępne, aby SSH mógł wyodrębnić klucz publiczny.
Są z tym dwa problemy:
- przestaje działać, gdy tylko odłączę dysk flash przytrzymujący klawisze
- sprawia, że przekazywanie agentów jest bezużyteczne, ponieważ pliki kluczy nie są dostępne na zdalnym hoście
Oczywiście mogę wyodrębnić klucze publiczne z moich plików tożsamości i zapisać je na moim komputerze oraz na każdym komputerze zdalnym, na którym zwykle się loguję. Nie wydaje się to jednak pożądanym rozwiązaniem.
Potrzebuję możliwości wybrania tożsamości z ssh-agent według nazwy pliku, dzięki czemu mogę łatwo wybrać odpowiedni klucz za pomocą .ssh/config
lub przekazując -i /path/to/original/key
, nawet na zdalnym hoście, do którego SSH wybrałem. Byłoby jeszcze lepiej, gdybym mógł „nadać pseudonim” kluczom, aby nawet nie musiałem określać pełnej ścieżki.
authorized_keys
plik, który w zależności od użytego klucza wykonuje różne polecenia, nigdy nie zezwalając na bezpośredni dostęp do powłoki.Odpowiedzi:
Chyba będę musiał odpowiedzieć na własne pytanie, ponieważ wydaje się, że nie ma sposobu, aby poprosić o tożsamość według nazwy pliku.
Napisałem szybkie i brudne skrypty Pythona, które tworzą plik klucza publicznego
.ssh/fingerprints
dla każdego klucza, który posiada agent. Następnie mogę określić ten plik, który nie zawiera tajnego klucza,IdentityFile
a SSH wybierze odpowiednią tożsamość od agenta SSH. Działa idealnie dobrze i pozwala mi korzystać z agenta dla dowolnej liczby kluczy prywatnych, jakie chcę.źródło
Biegać
na zdalnym komputerze, aby automatycznie wygenerować wszystkie pliki kluczy publicznych (zakładając, że klucze publiczne w twoim
.ssh/config
są nazwaneprivateKeyFileName.pub
i nie są zaangażowane niespójne ścieżki). Zadzwońchown $USER .ssh/*
po swojąsudo
skrzynkę.źródło
Pobieranie z zaakceptowanego rozwiązania i zakładanie, że chcesz ponownie użyć tożsamości użytej do uzyskania dostępu do początkowego serwera, a następnie coś w stylu:
jest wystarczający.
źródło