Użyłem generatora kluczy PuTTY do wygenerowania 4096-bitowego klucza RSA-2 z hasłem.
Zapisuję plik .ppk i klucz publiczny w formacie openSSL. Klucz publiczny w formacie kitu nie działa.
W każdym razie mój błąd jest następujący:
$ ssh -T [email protected]
key_load_public: invalid format
Enter passphrase for key '/c/Users/Dan/.ssh/id_rsa':
Hi Dan! You've successfully authenticated, but GitHub does not provide shell access.
W czym problem?
Używam Pageant do ładowania kluczy i używam Git Bash do wypróbowania połączenia ssh. Załadowałem również klucz do GitHub, nie jestem pewien, co robię źle.
Próbowałem dodać nową linię i nie dodawać nowej linii w GitHub
git
github
ssh
public-key
JordanGS
źródło
źródło
key_load_public: invalid format
dobrze, gdy wykonuję polecenie, zanim wprowadzę hasło?Odpowiedzi:
Jak wspomniał Roland w swojej odpowiedzi, jest to ostrzeżenie, że
ssh-agent
nie rozumie formatu klucza publicznego i nawet wtedy klucz publiczny nie będzie używany lokalnie.Mogę jednak również rozwinąć i odpowiedzieć, dlaczego jest to ostrzeżenie. Sprowadza się to po prostu do tego, że PuTTY Key Generator generuje dwa różne formaty kluczy publicznych w zależności od tego, co robisz w programie.
Uwaga: W całym moim wyjaśnieniu pliki kluczy, których będę używać / generować, będą miały nazwy
id_rsa
z odpowiednimi rozszerzeniami. Ponadto, dla wygody kopiowania i wklejania, zakłada się, że folder nadrzędny kluczy to~/.ssh/
. Dostosuj te szczegóły do swoich potrzeb.Formaty
Link do odpowiedniej dokumentacji PuTTY
SSH-2
Podczas zapisywania klucza za pomocą Generatora kluczy PuTTY za pomocą przycisku „Zapisz klucz publiczny”, zostanie on zapisany w formacie określonym przez RFC 4716 .
Przykład:
OpenSSH
Wbrew powszechnemu przekonaniu ten format nie jest zapisywany przez generator. Jednak jest generowany i wyświetlany w polu tekstowym zatytułowanym „Klucz publiczny do wklejania do pliku autoryzowanych kluczy OpenSSH”. Aby zapisać go jako plik, musisz ręcznie skopiować go z pola tekstowego i wkleić do nowego pliku tekstowego.
W przypadku klucza pokazanego powyżej wyglądałoby to następująco:
Format klucza jest prosty
ssh-rsa <signature> <comment>
i można go utworzyć, zmieniając format pliku w formacie SSH-2.Regeneracja kluczy publicznych
Jeśli korzystasz z
ssh-agent
, prawdopodobnie będziesz mieć również dostęp dossh-keygen
.Jeśli masz swój klucz prywatny OpenSSH (
id_rsa
plik), możesz wygenerować plik klucza publicznego OpenSSH za pomocą:Jeśli masz tylko klucz prywatny PUTTY (
id_rsa.ppk
plik), musisz go najpierw przekonwertować.id_rsa.ppk
plikid_rsa
(bez rozszerzenia)Teraz, gdy masz już klucz prywatny OpenSSH, możesz użyć
ssh-keygen
narzędzia jak powyżej, aby wykonać manipulacje na kluczu.Bonus: Format klucza publicznego zakodowany w PKCS # 1 PEM
Szczerze mówiąc, nie wiem, do czego służy ten klucz, ponieważ go nie potrzebowałem. Ale mam to w swoich notatkach, które zbierałem przez lata i dołączę to tutaj dla zdrowej dobroci. Plik będzie wyglądał następująco:
Ten plik można wygenerować przy użyciu klucza prywatnego OpenSSH (wygenerowanego w sekcji „Regenerowanie kluczy publicznych” powyżej) przy użyciu:
Alternatywnie możesz użyć klucza publicznego OpenSSH za pomocą:
Bibliografia:
źródło
.ppk
do.pub
pliku. Przeoczono efekt uboczny pośredniegoid_rsa
klucza prywatnego faktycznie używanego przez inny program. Zmieniłem język „najlepiej bez rozszerzenia” na „(bez rozszerzenia)”, aby usunąć wszelkie niejasności. Skorzystałem również z okazji, aby przeformułować niektóre żale, które pojawiają się, gdy spojrzę wstecz na tę odpowiedź. Dziękuję za twój wkład.ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub
to go rozwiązało. DZIĘKI!Istnieje proste rozwiązanie, jeśli możesz zainstalować i używać narzędzia puttygen. Poniżej znajdują się kroki. Powinieneś mieć hasło klucza prywatnego.
Krok 1: Pobierz najnowszy puttygen i otwórz puttygen
krok 2: Załaduj istniejący plik klucza prywatnego, patrz poniższy obrazek
Krok 3: Wprowadź hasło dostępu do klucza, jeśli zostaniesz o to poproszony, i naciśnij OK
krok 4: jak pokazano na poniższym obrazku wybierz zakładkę "konwersja" i wybierz "Eksportuj klucz OpenSSH"
Zapisz nowy plik klucza prywatnego w preferowanej lokalizacji i użyj go odpowiednio.
źródło
load pubkey invalid format
ostrzeżenie, kiedy wyeksportowałem klucz za pomocą Eksportuj klucz OpenSSH . To zniknęło podczas korzystania z eksportu klucza OpenSSH (wymuś nowy format pliku) .apt install putty-tools
lubyum install putty
wtedysudo puttygen private.ppk -O private-openssh-new -o private.pem
TL; DR: upewnij się również, że jesteś
id_rsa.pub
w ascii / UTF-8.Miałem ten sam problem, jednak sama zaakceptowana odpowiedź nie zadziałała z powodu kodowania tekstu, co było dodatkowym, łatwym do przeoczenia problemem.
Kiedy biegnę
w Windows PowerShell zapisuje dane wyjściowe
id_rsa.pub
w kodowaniu UTF-16 LE BOM , a nie w UTF-8 . Jest to właściwość niektórych instalacji programu PowerShell, która została omówiona w temacie Używanie programu PowerShell do zapisywania pliku w UTF-8 bez BOM . Najwyraźniej OpenSSH nie rozpoznaje poprzedniego kodowania tekstu i generuje identyczny błąd:Kopiowanie i wklejanie wyniku programu
ssh-keygen -f ~/.ssh/id_rsa -y
do edytora tekstu to najprostszy sposób rozwiązania tego problemu.PS To mógłby być dodatek do zaakceptowanej odpowiedzi , ale nie mam jeszcze wystarczającej karmy, aby tu komentować.
źródło
ssh-keygen -f ~/.ssh/id_rsa -y | ac ~/.ssh/id_rsa.pub
użyłbyś.W przypadku skopiowania klucza publicznego ze schowkiem i wklejenia go, może się zdarzyć, że ciąg klucza publicznego zostanie uszkodzony, który zawiera nową linię.
Upewnij się, że ciąg klucza publicznego jest utworzony jako jedna linia.
źródło
Wygląda na to, że
ssh
nie może odczytać Twojego klucza publicznego. Ale to nie ma znaczenia.Przesyłasz swój klucz publiczny na github, ale uwierzytelniasz się za pomocą klucza prywatnego . Zobacz np. Sekcję PLIKI w
ssh(1)
.źródło
Zamiast bezpośrednio zapisywać klucz prywatny, przejdź do opcji Konwersje i Eksportuj klucz SSh. Miałem ten sam problem i to działało dla mnie
źródło
Błąd jest mylący - mówi „
pubkey
”, wskazując na plik klucza prywatnego~/.ssh/id_rsa
.W moim przypadku był to po prostu brakujący klucz publiczny (ponieważ nie przywróciłem go ze skarbca).
DETALE
Kiedyś pomijałem wdrażanie za
~/.ssh/id_rsa.pub
pomocą automatycznych skryptów.Wszystkie
ssh
zwyczaje działały, ale błąd sprawił, że pomyślałem o możliwym bałaganie.Wcale nie -
strace
pomogło zauważyć, że wyzwalaczem był w rzeczywistości*.pub
plik:źródło
Miałem to samo ostrzeżenie. To był bardzo stary klucz. Ponownie wygenerowałem klucz na obecnym OpenSSH 7 i błąd zniknął.
źródło
Tak więc po aktualizacji miałem ten sam problem. Używałem PEM
key_file
bez rozszerzenia i po prostu dodanie.pem
rozwiązało mój problem. Teraz plik jestkey_file.pem
.źródło
Jeśli używasz systemu Windows 10 z wbudowanym SSH, od sierpnia 2020 r. Obsługuje on tylko klucze ed25519. Pojawi się
key_load_public: invalid format
błąd, jeśli użyjesz np. Klucza RSA.Jeśli chodzi o ten problem z GitHubem , powinien on zostać naprawiony przez Windows Update w 2020 roku. Tak więc jednym z rozwiązań jest po prostu poczekanie na wysłanie aktualizacji.
Jeśli nie możesz czekać, obejściem jest wygenerowanie nowego klucza ed25519, co i tak jest dobrą radą .
Możesz go używać np. Z github, ale niektóre starsze systemy mogą nie obsługiwać tego nowszego formatu.
Po wygenerowaniu klucza, jeśli używasz jednej z poniższych funkcji, nie zapomnij ich zaktualizować!
~\.ssh\config
może nadal wskazywać na stary klucz.ssh-add
poleceniaźródło