Umieszczam pliki tożsamości ssh w folderze ~ / .ssh /. Mam tam prawdopodobnie około 30 plików.
Kiedy połączę się z serwerami, określę plik tożsamości, który będzie używany, z czymś takim
ssh -i ~ / .ssh / client1-tożsamość [email protected]
Jeśli jednak nie podam pliku tożsamości, wystarczy użyć czegoś takiego:
ssh uż[email protected]
Dostaję błąd
Zbyt wiele błędów uwierzytelnienia dla użytkownika123
Rozumiem, że dlatego, że jeśli nie określono pliku tożsamości, a ssh może znaleźć pliki tożsamości, spróbuje je wszystkie.
Rozumiem również, że mogę edytować ~/.ssh/config
plik i określić coś takiego:
Host example.com Preferowane uwierzytelnienia: klawiatura interaktywna, hasło
aby uniemożliwić temu połączeniu próbowanie znanych plików tożsamości.
Wydaje mi się, że mógłbym przenieść moje pliki tożsamości poza ~/.ssh/
katalog lub też określić w pliku konfiguracyjnym każdego hosta, dla którego chcę wyłączyć uwierzytelnianie pliku tożsamości, ale czy istnieje sposób, aby powiedzieć SSH, aby kupił domyślnie, aby nie szukał pliki tożsamości? Lub określić te, których będzie szukać?
źródło
ssh -v
aby się upewnić.Odpowiedzi:
Możesz użyć tej
IdentitiesOnly=yes
opcji razem zIdentityFile
(patrz strona podręcznika ssh_config ). W ten sposób możesz określić, którego pliku (plików) powinien szukać.W tym przykładzie ssh będzie szukał tylko tożsamości podanych w plikach ssh_config + 4 wymienione w wierszu poleceń (tożsamości podane przez agenta zostaną zignorowane):
Formularze
-i
i-o IdentityFile=
są wymienne.źródło
IdentitiesOnly yes
(bez „=”)?Configuration options may be separated by whitespace or optional whitespace and exactly one '='; the latter format is useful to avoid the need to quote whitespace when specifying configuration options using the ssh, scp, and sftp -o option.
IdentitiesOnly
może nie zawsze działać, może być konieczne wyłączenie hosta; patrz superuser.com/questions/859661/…Krótka odpowiedź użytkownika user76528 jest poprawna, ale właśnie miałem ten problem i pomyślałem, że przydałoby się jakieś rozwinięcie. Możesz również zainteresować się tym rozwiązaniem, jeśli zastanawiasz się „Dlaczego ssh ignoruje moją opcję konfiguracji pliku tożsamości”?
Po pierwsze, w przeciwieństwie do wszystkich innych opcji w ssh_config, ssh nie używa pierwszej
IdentityFile
, którą znajdzie. Zamiast tegoIdentityFile
opcja dodaje ten plik do listy używanych tożsamości. Możesz układać w stos wieleIdentityFile
opcji, a klient ssh wypróbuje je wszystkie, dopóki serwer nie zaakceptuje jednej lub odrzuci połączenie.Po drugie, jeśli użyjesz agenta ssh, ssh automatycznie spróbuje użyć kluczy w agencie, nawet jeśli nie określiłeś ich za pomocą opcji IdentityFile (lub -i) ssh_config. Jest to częsty powód
Too many authentication failures for user
błędu. Użycie tejIdentitiesOnly yes
opcji spowoduje wyłączenie tego zachowania.Jeśli używasz ssh jako wielu użytkowników w wielu systemach, zalecam umieszczenie
IdentitiesOnly yes
globalnej sekcji ssh_config i umieszczenie każdego z nichIdentityFile
w odpowiednich podsekcjach Hosta.źródło
IdentitiesOnly yes
w globalnej sekcji ssh_config jest tym, co mi zrobiło. Dzięki!Host * \ IdentityFile ~/.ssh/mykey
jako opcji konfiguracji i na początku wydawało się dziwne, że posiadanie innego wpisu dla określonej witryny, np.Host special \ IdentityFile ~/.ssh/specialkey \ IdentitiesOnly yes
Kontynuowałem dostarczaniemykey
zamiastspecialkey
. Z pewnością nie było jasne, dopóki nie zorientowałem się (z twojej odpowiedzi), że wpisy IdentityFile są ułożone w kolejności oceny i zostanie użyty ostatni zdefiniowany. UsunięcieIdentityFile ~/.ssh/mykey
rozwiązało problem i użyto poprawnego, pojedynczego klucza.git pull/push
polecenia próbują każdej tożsamości załadowanej do mojego agenta. Nie było problemu, dopóki w pewnym momencie nie miałem zbyt wielu kluczy.Generalnie robię to tak:
Dostępne są następujące opcje:
-o IdentitiesOnly=yes
- informuje SSH, aby używał tylko kluczy dostarczonych przez CLI i żadnych z$HOME/.ssh
lub za pośrednictwem ssh-agent-F /dev/null
- wyłącza użycie$HOME/.ssh/config
-i ~/path/to/some_id_rsa
- klucz, którego wyraźnie chcesz użyć do połączeniaPrzykład
Zwróć uwagę na powyższe dane wyjściowe, które
ssh
zidentyfikowałymy_id_rsa
klucz prywatny tylko za pomocą interfejsu CLI i używa go do łączenia się z jakimś serwerem.W szczególności te sekcje:
i:
źródło
-F /dev/null
jest to brakujący fragment w innych odpowiedziach.W scenariuszu, w którym masz wiele kluczy, niezmiennie napotykasz błąd „Zbyt wiele niepowodzeń uwierzytelniania”. Jeśli masz hasło i chcesz po prostu użyć hasła, aby się zalogować, oto jak to zrobić.
Aby użyć TYLKO uwierzytelnienia hasłem i NIE używać klucza publicznego, a NIE używać nieco wprowadzającej w błąd „interaktywnej klawiatury” (która jest nadzbiorem zawierającym hasło), możesz to zrobić z wiersza poleceń:
źródło
Użyj IdentityFile, ale nadal używaj ssh-agent, aby uniknąć powtórzeń hasła
Akceptowane rozwiązanie używania
IdentitiesOnly yes
oznacza, że nigdy nie będziesz w stanie skorzystać z ssh-agent, co spowoduje powtarzanie monitów o podanie hasła podczas ładowania klucza.Aby nadal używać
ssh-agent
i unikać błędów „Zbyt wiele niepowodzeń uwierzytelniania”, spróbuj wykonać następujące czynności:Usuń wszystkie skrypty uruchamiania interaktywnej konsoli, które automatycznie ładują klucze
ssh-agent
.dodaj
AddKeysToAgent yes
do konfiguracji ssh swojego klienta. Spowoduje to wyświetlenie monitu o podanie hasła przy pierwszym połączeniu, ale następnie dodaj klucz do agenta.używaj,
ssh-add -D
gdy pojawi się błąd „zbyt wiele uwierzytelnień”. To po prostu „resetuje” (usuwa) pamięć podręczną agenta ssh. Następnie spróbuj ponownie nawiązać połączenie w tej samej sesji. Zostaniesz poproszony o hasło, a po zaakceptowaniu zostanie dodane do Twojego agenta. Ponieważ będziesz mieć tylko jeden klucz w swoim agencie, będziesz mógł się połączyć. Następnie ssh-agent jest nadal dostępny dla przyszłych połączeń podczas tej samej sesji, aby uniknąć ponownych monitów.źródło
Klient ssh i
ssh-agent
komunikuje się przez gniazdo domeny Unix, którego nazwę określa klient za pomocąSSH_AUTH_SOCK
zmiennej środowiskowej (ustawionej przez agenta podczas jego uruchamiania).Zatem, aby zapobiec pojedynczemu wywołaniu klienta w celu wysłania zapytania do agenta, zmienna ta może zostać jawnie ustawiona na coś niepoprawnego, na przykład pusty ciąg znaków;
Takie wywołanie klienta nie powiedzie się w komunikacji z agentem i będzie w stanie zaoferować serwerowi tylko tożsamości dostępne w postaci plików
~/.ssh/
lub dowolne określone w wierszu komend-i
.źródło
Odpowiedź była przez cały czas (prawie):
Pracował dla mnie.
źródło
dodaj to na końcu
~/.ssh/config
pliku, aby zapobiec użyciu kluczy dla serwerów innych niż konfiguracyjne:źródło