SSH Nagle zwraca Nieprawidłowy format

23

Jakiś czas temu założyłem serwer na AWS i użyłem ich wygenerowanego klucza SSH. Zapisałem klucz do Lastpass i udało mi się go wcześniej odzyskać i uruchomić. Jednak po ponownym spróbowaniu tego dzisiaj nie mogę go uruchomić.

-rw------- 1 itsgreg users 1674 Jun 6 12:51 key_name

Próbowałem ssh -i key_name, ssh-keygen -f key_nameale nic nie działa, zawsze pojawia się ten komunikat o błędzie:

Load key "key_name": invalid format

Czy jest jakiś sposób, aby to naprawić?

Gregor Menih
źródło

Odpowiedzi:

13

Sprawdź zawartość key_name, jeśli agent mówi invalid format, że coś jest nie tak z kluczem - na przykład ... czy jesteś pewien, że to jest poprawny klucz? Nawet jeśli nie jest to potrzebny klucz prywatny, agent ssh nie zwróci, invalid formatjeśli klucz działa, po prostu nie będzie można się połączyć. Być może z jakiegoś powodu umieściłeś tam swój klucz publiczny. Sprawdź to!

13dimitar
źródło
6
Zdecydowanie sprawdzone. Zaczyna się ----BEGIN RSA PRIVATE KEY-----i kończy na -----END RSA PRIVATE KEY-----. Plus kiedyś działał.
Gregor Menih
2
Bardzo mało prawdopodobne, ale nadal możliwe, jest uszkodzenie pliku. Utwórz nowy i ponownie wypełnij zawartość z lastpass.
13dimitar
2
Wow, to naprawdę pomogło! Po wygenerowaniu nowego klucza zauważyłem, że nowy klucz ma 64 znaki w wierszu, podczas gdy mój stary klucz ma 76. Sformatowałem mój stary klucz tak, aby miał tylko 64 znaki w wierszu, i wtedy zaczął działać! Brakowało mi też jednej kreski z pierwszego wiersza.
Gregor Menih
2
„Brakowało mi też jednej kreski w pierwszym wierszu.” Tak samo. Dziękuję za to @ItsGreg. Tak często tęsknię za pierwszą postacią podczas wybierania i kopiowania między terminalami!
starfry
15

To, co zrobiłem, aby rozwiązać ten problem, polega na tym, że używam do konwersji pliku PPK za pomocą PuttyGen.

Najpierw załaduj urkey.PPK, a następnie w menu konwersji kliknij eksport do formatu pliku openssh. Spowoduje to utworzenie pliku newkey.

teraz, ssh -i "newkey" [email protected]

Gotowy. Mam nadzieję, że to pomoże.

Ras
źródło
4

Poprosiłem openssh o użycie konkretnego pliku tożsamości, określając go w pliku .ssh / config.

Oryginalna konfiguracja robocza miała

IdentityFile = <path to public key file> 

To przestało działać bez żadnych zmian. Przy odrobinie myślenia zastąpiłem „ścieżkę do pliku klucza publicznego” powyżej „ścieżką do pliku klucza prywatnego”. To się udało. Powodem jest to, że zarówno pliki kluczy publicznych, jak i prywatnych mają duże liczby związane z peudoprime zgodnie z algorytmem RSA. Jeśli zamienisz plik klucza prywatnego na plik klucza publicznego, te numery kryptograficzne nie zostaną poprawnie wyodrębnione z bloku base64 zapisanego w plikach kluczy. Wygląda na to, że niektóre wersje ssh mogą rozpoznać rozszerzenie .pub i użyć go do zidentyfikowania poprawnego pliku klucza prywatnego - a inne wersje tego nie robią. Jest to kolejny sposób, w jaki ten błąd może się zdarzyć. Mam nadzieję, że to komuś pomoże.

vpathak
źródło
W moim przypadku miałem configplik instalacyjny path_to_public_keyi wszystko działało. Jednak gdy Mac wykonał twardy restart i kilka dni później próbowałem to zrobić git push, zacząłem otrzymywać powyższy błąd. Ale kiedy teraz to zmieniłem, path_to_private_keywszystko działa ... Hmmm. Nie jestem pewien, dlaczego ..
Lukik
3

Miałem ten sam problem i okazało się, że z jakiegoś powodu miałem w pliku separatory linii w stylu Windows (CRLF).

Ponadto plik musi kończyć się pojedynczym plikiem LF.

Naprawienie ich sprawiło, że wszystko znów stało się eleganckie.

AKX
źródło
To szokujące, że ten końcowy plik LF jest tak potrzebny, ale w rzeczywistości był to częściowo problem, z drugiej strony to, że utworzyłem plik w systemie Windows i robi to podział linii CRLF. Dla odniesienia innych dos2unixjest to polecenie konwersji z podziałów wiersza CRLF (w stylu Windows) na LF (w stylu Linux).
Hashim
1

Powinieneś przekonwertować swój klucz .ppk na klucz OpenSSH

Oto jak to zrobić :

  1. Pobierz PuttyGen i wygeneruj parę kluczy (jeśli nie masz gotowej pary kluczy). Zapisz klucz prywatny w swoim folderze (.ppk)
  2. Jeśli masz już klucz prywatny, załaduj plik klucza prywatnego (.ppk), naciskając przycisk „Ładuj”. W przeciwnym razie pomiń ten krok
  3. W menu „Konwersje” wybierz opcję Eksportuj klucz OpenSSH, a następnie zapisz go w folderze
  4. Teraz możesz użyć klucza do zalogowania się na serwerze bez wpisywania hasła (zakładam, że umieściłeś już klucz publiczny w katalogu /root/.ssh/authorized_keys, chmod 600 /root/.ssh/authorized_keys i ponownie uruchomiony SSH)
Dylan B.
źródło
1

Właśnie wpadłem na to dzisiaj, kiedy pisałem narzędzia do tagowania git dla mojego potoku CI.

Oto różnica między moimi dwoma kluczami:

$ diff ~/.ssh/gitlab ~/.ssh/git_ssh_key
27c27
< -----END OPENSSH PRIVATE KEY-----
---
> -----END OPENSSH PRIVATE KEY-----
\ No newline at end of file

Zmieniłem kod w taki sposób:

     with open(ssh_key_file, 'w') as skf:
-        skf.write(ssh_key)
+        skf.write(ssh_key + '\n')

A teraz działa mój klucz ssh.

TL; DR - Chyba musisz mieć nową linię na końcu swojego klucza prywatnego.

Robert J.
źródło
1

W moim przypadku okazało się, że miałem nowe linie między początkowymi / końcowymi „nagłówkami” a kluczowymi danymi:

-----BEGIN RSA PRIVATE KEY-----

- Key data here -

-----END RSA PRIVATE KEY-----

Usuwanie dodatkowych nowych linii, tak się stało

-----BEGIN RSA PRIVATE KEY-----
- Key data here -
-----END RSA PRIVATE KEY-----

rozwiązał mój problem.

użytkownik50849
źródło
0

Użyj klucza prywatnego zamiast klucza publicznego.

Richard
źródło
to samo rozwiązanie, co moja odpowiedź - z dodanym wyjaśnieniem
vpathak
0

Miałem ten problem, ponieważ miałem klucz w ~ / .ssh, który w rzeczywistości był nieprawidłowym formatem i miałem dużo kluczy, co oznaczało, że SSH próbował je wszystkie, mimo że w poleceniu podałem swój plik tożsamości. Po prostu się nie udaje, ponieważ myślę, że mogę wypróbować tylko 5 kluczy, a potem zostawił mi ten błąd, który był uzasadniony, tylko z powodu niewłaściwego pliku tożsamości. Rozwiązaniem było po prostu użyć IdentitiesOnly yesw mojej ~ / .ssh / config.

Elijah Lynn
źródło
0

Miałem ten błąd, ponieważ na początku pliku klucza była pusta linia. Łatwo przeoczyć, jeśli catgo wygaszasz.

Elijah Lynn
źródło
0

Jest to również błąd, który emituje ssh (przynajmniej niektóre wersje), jeśli masz hasło na kluczu prywatnym i wpisujesz hasło niepoprawnie podczas próby połączenia.

(W szczególności stało mi się to z: OpenSSH_7.6p1, LibreSSL 2.6.2, który jest wbudowanym SSH dla Mac OS X 10.13.6.)

Więc dokładnie sprawdź, czy używasz właściwego hasła i czy CAPS LOCK jest wyłączony.

ssh user on os x
źródło
-2

Pamiętaj, aby zmienić nazwę klucza PRYWATNEGO i usunąć rozszerzenie pliku, które jest problemem.

Kroki, które podjąłem

Utwórz swój klucz publiczny:

Upewnij się, że znajdujesz się w tym samym katalogu, w którym masz klucz prywatny

Jak utworzyć klucz publiczny:

ssh-keygen -y -f Private-Key.pem > Public-key.pub

upewnij się, że klucz PUBLIC ma rozszerzenie pliku .pub

po tym zapewnij odpowiednie uprawnienia ze względów bezpieczeństwa:

chmod 600 Private-Key.pem
chmod 400 Public-key.pub

NASTĘPNIE najważniejsza część i przyczyna błędu „nieprawidłowy format”

Pamiętaj, aby zmienić nazwę klucza PRYWATNEGO i usunąć rozszerzenie pliku:

Usuń .pem z klucza prywatnego.

mv Private-Key.pem Private-Key

lub jeśli na komputerze z systemem Windows zmieni nazwę klucza prywatnego, ta sama nazwa po prostu usuń .pem

SICKFREDO
źródło