Klucz SSH z prośbą o hasło?

35

Mam parę kluczy publiczny / prywatny. Żadne z nich nie wiąże się z żadnym hasłem.

Ilekroć próbuję ssh przy użyciu prywatnego lub publicznego (i jestem prawie pewien, że powinienem używać tylko klucza publicznego), otrzymuję zapytanie o hasło i wtedy oczywiście nie mogę się połączyć.

Czy ktoś ma pomysł, jak to obejść? Czy wpisuję jakieś polecenie niepoprawnie? Próbuję ssh na serwerze, który mam skonfigurowany w moim pliku ~ / .ssh / config (poprawnie, ponieważ ta sama konfiguracja działa na innym serwerze) z kluczem przechowywanym w ~ / .ec2 / key.ppk

Próbowałem również użyć puttygen.exe do wygenerowania nowego klucza prywatnego Z hasłem, a następnie przy użyciu tego klucza, a kiedy wpisuję hasło, nadal nie działa.

Llaskin
źródło

Odpowiedzi:

28

Po pierwsze, klucz prywatny będzie posiadał hasło. Sprawdza się to względem klucza publicznego przechowywanego na zdalnym serwerze.

ppkNajwyraźniej próbujesz użyć formatu klucza prywatnego putta ( ) w openssh, to nie działa ... PuTTYgen ma opcję eksportu dla openssh, jeśli tak jest.

ssh-rsa AAAAB3NzaC1y...... etc

Zakładam również, że na serwerze, na którym próbujesz ssh, twój klucz publiczny jest poprawnie zapisany w pliku autoryzowanego klucza ( ~/.ssh/authorized_keysogólnie).

Innym przypuszczeniem byłoby to, że nie wybrano prawidłowego klucza. Niektóre rzeczy, których spróbowałbym to:

Resetowanie hasła kluczowego za pomocą ssh-keygen, tak jak to ...

$ ssh-keygen -f ~/.ec2/key.ppk -p

Potwierdzi to, czy faktycznie twój klucz ma (lub nie ma) już hasło.

Po drugie, spróbuję połączyć się przy użyciu pełnego wyjścia, podając jawnie swój klucz publiczny:

$ ssh host -i ~/.ec2/key.ppk -vvv

To da ci więcej informacji o tym, co się dzieje.

mrverrall
źródło
Prawidłowo, jest to klucz generowany przez puttygen z klucza, który działa w putty. Kiedy szpachluję na tym samym serwerze (z komputera, na którym znajduje się instancja cygwin), działa dobrze z tym samym kluczem. Kiedy próbuję połączyć się przez ssh z cygwina, to się bombarduje. Nie wiem, jak to zrobić.
llaskin
6
Myślę, że punkty mrverrall są takie, że format pliku klucza prywatnego PuTTY nie jest taki sam jak format pliku używany w OpenSSH (klient ssh w cygwin). Tak więc OpenSSH po prostu nie korzysta z danych klucza prywatnego, ponieważ nie może zrozumieć, co one oznaczają. Ale PuTTY ma opcję „eksportu”, dzięki czemu można uzyskać dane w wymaganym formacie „PEM”.
Phil P
Ten błąd pojawia się również wtedy, gdy plik ma poprawny format - więc sprawdź dwukrotnie i potrójnie, czy skopiowałeś i wkleiłeś poprawnie, jeśli tworzysz go ręcznie.
Daniel Sokolowski,
Czy ssh-rsa AAAAB3NzaC1y...... etcto format z openssh, prawda? Mam ten format w moim kluczu prywatnym. Nagłówek stwierdza: PuTTY-User-Key-File-2: ssh-rsa Encryption: none Comment: imported-openssh-key Public-Lines: 6Ale plik jest przechowywany jako plik id_rsa. Czy to oznacza, że ​​nadal jest w formacie .ppk, mimo że nazwa pliku toid_rsa
alpha_989 15.01.2018
Tutaj znajdziesz odpowiedź na różne formaty. W moim przypadku, mimo że rozszerzenie tego pliku nie miało .ppk, nadal było w formacie szpachli, co mnie pomieszało, ponieważ wyświetlało wszelkiego rodzaju błędy, ale nie dawało mi żadnej bezpośredniej wskazówki, że problem dotyczy formatu klucza : stackoverflow.com/a/44391850/4752883
alpha_989
18

Możesz uruchomić ssh-agent. Zobacz tutaj dyskusję.

Krótka wersja, która zadziałała dla mnie (w bash):

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-rnRLi11880/agent.11880; export SSH_AUTH_SOCK;
SSH_AGENT_PID=11881; export SSH_AGENT_PID;
echo Agent pid 11881;

Wyjąłem 3 wiersze, które echo, i wykonałem je. Innym sposobem na zrobienie tego jest pobranie danych wyjściowych z -s:

$ eval `ssh-agent -s`

Następnie dodałem do niego moje poświadczenia:

$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/me/.ssh/id_rsa: 
Identity added: /home/me/.ssh/id_rsa (/home/me/.ssh/id_rsa)

Teraz agent dostarcza poświadczenia zamiast wpisywać moje hasło.

Wierzę, że ssh-agent odchodzi, gdy robi to powłoka, więc powinno to zostać napisane podczas uruchamiania dla maksymalnej wygody. Link dzieliłem opisuje włączony również.

dfrankow
źródło
4

Kiedy konfigurujesz swój klucz publiczny, prawdopodobnie (być może przypadkowo) ustawiasz go za pomocą hasła.

Prawdopodobnie musisz zacząć od nowa - nie użyłem puttygen, ale możesz usunąć (lub zmienić nazwę) klucz publiczny z katalogu .ssh, użyć ssh-keygendo wygenerowania nowego (pamiętaj, aby nie podawać hasła), a następnie udostępnij klucz publiczny w pliku autoryzowanych_kluczy na serwerze, z którym próbujesz się połączyć.

Konieczne może być także usunięcie starego klucza hasła z pliku kluczy autoryzowanych na serwerze, z którym się łączysz.

JohnMcG
źródło
4

Sprawdź, czy klucz prywatny id_rsanie ma dodatkowych podziałów linii na końcu, w niektórych przypadkach dodatkowe podziały linii spowodują, że ssh-keygen poprosi o hasło, spróbuj tego:

sed  '/^$/d' /path/to/key > id_rsa

test:

ssh-keygen -yf id_rsa
nbari
źródło
2
OMG to był mój problem. dodatkowa nowa linia po -----END RSA PRIVATE KEY-----spowodowała, że ​​prosi o hasło na kluczu, który nie miał jednego zestawu!
edk750
3

Jedną rzecz do sprawdzenia, jeśli twój plik sshd_config ma StrictModes = tak, to katalog $ HOME lub katalog $ HOME / .ssh nie mogą być zapisywane na całym świecie dla grupy lub innej grupy. W przeciwnym razie uwierzytelnianie nie powiedzie się bez względu na wszystko.

TD1
źródło
1

Popełniłem błąd, przypadkowo zastępując mój plik ~ / .ssh / id_rsa moim ~ / .ssh / id_rsa.pub. Spowoduje to, że ssh poprosi o hasło.

Red Cricket
źródło
0

Tego dnia wpadłem na ten problem. W szczególności próbowałem skopiować / wkleić prywatny klucz AWS z jednej maszyny na drugą.

Mam zły nawyk nieobecności pierwszej lub ostatniej postaci. Okazuje się, że jeśli nie pobierzesz każdego myślnika na końcu klucza prywatnego - nawet jeśli nie ma on nic wspólnego z samym tekstem klucza - zostaniesz poproszony o hasło do klucza prywatnego, dopóki nie dodasz wszystkich znaków z klucz, z którego skopiowałeś (w moim przypadku oznaczało to dodanie pojedynczego łącznika na końcu klucza).

Podejrzewam, że oznacza to, że najlepszą praktyką jest SSH plik tekstowy w poprzek drutu zamiast próby kopiowania i wklejania między oknami terminalu.

Profesor Tom
źródło
0

Na OSX mogłem po prostu uruchomić:

$ ssh-add ~/.ssh/id_rsa Enter passphrase for /Users/me/.ssh/id_rsa: `Identity added: /Users/mikekilmer/.ssh/id_rsa (/Users/mikekilmer/.ssh/id_rsa)

Hasło zostało zapisane w aplikacji Keychain Access, która znajduje się w folderze Aplikacje> Narzędzia. Właśnie wpisałem id_w polu wyszukiwania.

MikeiLL
źródło
0

Spróbuj przejrzeć pliki dziennika na serwerze. Zobacz / var / log / auth log (np. / Var / log / authlog dla OpenSSH, chociaż widziałem, że niektóre systemy operacyjne używają Portable OpenSSH i używają /var/log/auth.log) i sprawdzają koniec tego pliku.

Najczęstsze przyczyny, które widziałem, to nieprawidłowe uprawnienia (jak odnotowano w odpowiedzi TD1 ), chociaż inne problemy mogą wynikać z tego, że klucz publiczny (przechowywany na serwerze) nie znajduje się w odpowiednim pliku, ten klucz jest komentowany lub błędna nazwa użytkownika.

Pomocne może być również (w przypadku rozwiązywania problemów) tymczasowe nadanie hasłu hasła, aby sprawdzić, czy można pomyślnie zalogować się do konta.

Jeśli przeglądanie pliku dziennika nie prowadzi szybko do rozwiązania, sugeruję opublikowanie nowego pytania (ponieważ jest to świetne uogólnione pytanie), które zawiera szczegółowe informacje z pliku dziennika, aby można było podać bardziej szczegółowe wskazówki.

TOOGAM
źródło
0

W moim zespole, gdy tak się dzieje, nie ma to żadnego problemu lokalnie. Klucz ssh i / lub dostęp użytkownika nie został poprawnie skonfigurowany na serwerze, z którym się łączy (w naszym przypadku na platformie hostingowej). Z jakiegoś powodu powoduje to wyświetlenie monitu o nieistniejący klucz ssh.

ognockocaten
źródło