key_load_public : 잘못된 형식


99

PuTTY Key Generator를 사용하여 암호가있는 4096 비트 RSA-2 키를 생성했습니다.

.ppk와 openSSL 형식 공개 키를 저장합니다. 퍼티 형식 공개 키가 작동하지 않습니다.

어쨌든 내 오류는 다음과 같습니다.

$ ssh -T git@github.com
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.

무엇이 문제입니까?

Pageant를 사용하여 키를로드하고 Git Bash를 사용하여 ssh 연결을 시도합니다. 나는 또한 키를 GitHub에로드했지만 내가 뭘 잘못하고 있는지 확실하지 않습니다.

새 줄을 추가하고 GitHub에 새 줄을 추가하지 않았습니다.


왜 작동하지 않는다고 생각하십니까? 성공적으로 인증 되었다고 표시 됩니다.
Roland Smith

2
@RolandSmith key_load_public: invalid format암호를 입력하기 전에 명령을 실행하면 바로 나에게 말하는 것 입니까?
JordanGS

1
Do : 'ssh -vvv -T git@github.com'to get more info, 아마도 ~ / .ssh / known_hosts는 나쁘다-ssh는 github의 공개 키를 찾고 있습니다. '파일 키'를 실행하여 키 파일의 형식을 찾을 수 있습니다.
mosh

답변:


183

으로 롤랜드는 자신의 대답에 언급, 그것은 경고가가의 ssh-agent공개 키의 형식을 이해하지 않는, 심지어 다음, 공개 키는 로컬로 사용되지 않습니다.

그러나 경고가있는 이유를 자세히 설명하고 대답 할 수도 있습니다. 단순히 PuTTY 키 생성기 가 프로그램에서 수행하는 작업에 따라 두 가지 다른 공개 키 형식을 생성 한다는 사실로 귀결됩니다 .

참고 : 설명 전반에 걸쳐 사용 / 생성 할 키 파일은 id_rsa적절한 확장자 로 이름이 지정 됩니다. 또한 복사-붙여 넣기의 편의를 위해 키의 상위 폴더는 ~/.ssh/. 필요에 따라 이러한 세부 사항을 조정하십시오.

형식

관련 PuTTY 문서 링크

SSH-2

이 때 저장 사용하여 키를 퍼티 키 생성기를 "저장 공개 키"버튼을 사용하여, 그것은에 의해 정의 된 형식으로 저장됩니다 RFC 4716 .

예:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "github-example-key"
AAAAB3NzaC1yc2EAAAABJQAAAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYF
i2fSBrsGcmqeb5EwgnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcp
pY0fhRSGtWL5fT8DGm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3
oMrongEjGw7sDP48ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEA
ip3mL20+qHNsHfW8hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9
tBjh7cOyuU/c4M4D6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElw==
---- END SSH2 PUBLIC KEY ----

OpenSSH

대중적인 믿음과는 달리이 형식은 생성기에 의해 저장되지 않습니다. 그러나 "OpenSSH authorized_keys 파일에 붙여 넣기위한 공개 키"라는 제목의 텍스트 상자에 생성되고 표시됩니다. 파일로 저장하려면 텍스트 상자에서 수동으로 복사하여 새 텍스트 파일에 붙여 넣어야합니다.

위에 표시된 키의 경우 다음과 같습니다.

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYFi2fSBrsGcmqeb5EwgnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcppY0fhRSGtWL5fT8DGm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3oMrongEjGw7sDP48ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEAip3mL20+qHNsHfW8hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9tBjh7cOyuU/c4M4D6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElw== github-example-key

키의 형식은 간단 ssh-rsa <signature> <comment>하며 SSH-2 형식의 파일을 재 배열하여 만들 수 있습니다.

공개 키 재생성

을 사용하는 ssh-agent경우에도 액세스 할 수 ssh-keygen있습니다.

OpenSSH 개인 키 ( id_rsa파일)가있는 경우 다음을 사용하여 OpenSSH 공개 키 파일을 생성 할 수 있습니다.

ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub

PUTTY 개인 키 ( id_rsa.ppk파일) 만있는 경우 먼저 변환해야합니다.

  1. PuTTY 키 생성기 열기
  2. 메뉴 모음에서 "파일"> "개인 키로드"를 클릭합니다.
  3. id_rsa.ppk파일 선택
  4. 메뉴 표시 줄에서 "변환"> "OpenSSH 키 내보내기"를 클릭합니다.
  5. 파일을 다른 이름으로 저장 id_rsa(확장자 없음)

이제 OpenSSH 개인 키가 ssh-keygen있으므로 위와 같은 도구를 사용 하여 키에 대한 조작을 수행 할 수 있습니다 .

보너스 : PKCS # 1 PEM 인코딩 공개 키 형식

솔직히 말해서이 키가 필요하지 않았기 때문에이 키가 어떤 용도로 사용되는지 모르겠습니다. 그러나 나는 수년에 걸쳐 수집 한 노트에 그것을 가지고 있으며 건전한 선을 위해 여기에 포함시킬 것입니다. 파일은 다음과 같습니다.

-----BEGIN RSA PUBLIC KEY-----
MIIBCAKCAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYFi2fSBrsGcmqeb5Ew
gnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcppY0fhRSGtWL5fT8D
Gm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3oMrongEjGw7sDP48
ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEAip3mL20+qHNsHfW8
hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9tBjh7cOyuU/c4M4D
6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElwIBJQ==
-----END RSA PUBLIC KEY-----

이 파일은 다음을 사용하여 OpenSSH 개인 키 (위의 "공개 키 재생성"에서 생성됨)를 사용하여 생성 할 수 있습니다.

ssh-keygen -f ~/.ssh/id_rsa -y -e -m pem > ~/.ssh/id_rsa.pem

또는 다음을 사용하여 OpenSSH 공개 키를 사용할 수 있습니다.

ssh-keygen -f ~/.ssh/id_rsa.pub -e -m pem > ~/.ssh/id_rsa.pem

참조 :


개인 키를 OpenSSH 키로 변환 할 때 파일 확장자가없고 바람직하지 않은 상태로 두는 것이 좋습니다. 내 git-client는 개인 키에 확장이 사용되는 경우 원격 저장소에 연결하지 않습니다.
Programmer1994

Programmer1994 @ 변환 지침은 변환하는 단계에 포함 된 .ppkA와 .pub파일. id_rsa다른 프로그램에서 실제로 사용되는 중개 개인 키 의 부작용 은 간과되었습니다. 모호함을 없애기 위해 "preferably extensionless"언어를 "(without an extension)"로 변경했습니다. 나는 또한이 답변을 돌아볼 때마다 제기되는 몇 가지 불만 사항을 다시 말할 기회를 가졌습니다. 당신의 기여에 감사드립니다.
samthecodingman

답변 해주셔서 감사합니다. 귀하의 답변 "공개 키 재생성"섹션에서 명령을 사용했으며 내 문제가 해결되었습니다.
desmond13

당신은 공개 키에 대해 이야기했습니다. 그러나 문제는 개인 키 id_rsa에서 생성됩니다. ssh를 통해 git 서버에 액세스하려고 할 때 개인 ssh 키를 사용할 때 동일한 경고가 표시됩니다.
ahnbizcad

5
ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub이것은 그것을 해결했습니다. 고마워!
Dwza

16

puttygen 도구를 설치하고 사용할 수 있다면 간단한 해결책이 있습니다. 다음은 단계입니다. 개인 키의 암호가 있어야합니다.

1 단계 : 최신 puttygen을 다운로드 하고 puttygen 을 엽니 다.

2 단계 : 기존 개인 키 파일로드, 아래 이미지 참조

기존 개인 키로드

3 단계 : 요청시 키에 대한 암호를 입력하고 확인을 누릅니다.

paasphrase를 입력

4 단계 : 아래 이미지와 같이 "변환"메뉴 탭을 선택하고 "OpenSSH 키 내보내기"를 선택합니다.

OpenSSH 파일 저장

새 개인 키 파일을 선호하는 위치에 저장하고 그에 따라 사용하십시오.


2
내가 가지고 load pubkey invalid format내가 가진 키 내보낼 때, 경고를 내보내기 OpenSSH의 키를 . Export OpenSSH 키를 사용할 때 사라졌습니다 (새 파일 형식 강제) .
elsamuko

Linux apt install putty-tools또는 yum install putty그 다음sudo puttygen private.ppk -O private-openssh-new -o private.pem
Typel

9

TL; DR : 또한 id_rsa.pubascii / UTF-8 인지 확인하십시오 .

나는 같은 문제가 있었지만 텍스트 인코딩 때문에 받아 들인 대답 만으로는 작동하지 않았으며 이는 추가적이고 놓치기 쉬운 문제였습니다.

내가 달릴 때

ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub

Windows PowerShell을, 그것은에 출력 저장 id_rsa.pubUTF-16 LE BOM의 인코딩,하지의 UTF-8 . 이는 PowerShell을 사용하여 BOM없이 UTF-8로 파일 쓰기 에서 논의한 일부 PowerShell 설치의 속성입니다 . 분명히 OpenSSH는 이전 텍스트 인코딩을 인식하지 못하고 동일한 오류를 생성합니다.

key_load_public: invalid format

의 출력을 복사 ssh-keygen -f ~/.ssh/id_rsa -y하여 텍스트 편집기에 붙여 넣는 것이이 문제를 해결하는 가장 간단한 방법입니다.

추신 이것은 받아 들인 대답에 추가 될 수 있지만 아직 여기에 언급 할 충분한 업장이 없습니다.


1
아시다시피 파이핑은 Powershell에서 다르게 작동합니다. ssh-keygen -f ~/.ssh/id_rsa -y | ac ~/.ssh/id_rsa.pub대신 사용 합니다.
samthecodingman

7

공개 키를 클립 보드로 복사하여 붙여 넣는 경우 개행이 포함 된 공개 키 문자열이 깨질 수 있습니다.

공개 키 문자열이 한 줄로 구성되었는지 확인하십시오.


5

ssh공개 키를 읽을 수없는 것 같습니다 . 그러나 그것은 중요하지 않습니다.

공개 키 를 github에 업로드 하지만 개인 키를 사용하여 인증합니다 . 예를 들어의 FILES 섹션을 참조하십시오 ssh(1).


2
간단히 말해서, putty key gen으로 이동하여 변환-> ssh 키를 열고 id_rsa에 저장하십시오. HOME 환경 변수가보고있는 .ssh 폴더를 가리키는 지 확인하고 시스템에서 id_rsa 파일의 다른 모든 사본을 삭제하십시오.
Kalpesh Soni

2

개인 키를 직접 저장하는 대신 변환 및 SSh 키 내보내기로 이동하십시오. 같은 문제가 있었고 이것은 나를 위해 일했습니다.


2

이 오류는 잘못된 것 입니다. pubkey개인 키 파일을 가리키는 동안 " " 라고 표시 됩니다 ~/.ssh/id_rsa.

제 경우에는 (볼트에서 복원하지 않았으므로) 단순히 누락 된 공개 키였습니다.


세부

나는 ~/.ssh/id_rsa.pub자동화 된 스크립트에 의한 배포를 건너 뛰곤 했다.

모든 ssh사용법이 작동했지만 오류로 인해 엉망이 될 수 있다고 생각했습니다.

전혀- strace트리거가 실제로 *.pub파일 임을 알아 차리는 데 도움이되었습니다 .

strace ssh example.com
...
openat(AT_FDCWD, "/home/uvsmtid/.ssh/id_rsa.pub", O_RDONLY) = -1 ENOENT (No such file or directory)
...
write(2, "load pubkey \"/home/uvsmtid/.ssh/"..., 57) = 57
load pubkey "/home/uvsmtid/.ssh/id_rsa": invalid format

1

나는 같은 경고를 받았다. 아주 오래된 열쇠였습니다. 현재 OpenSSH 7에서 키를 다시 생성했는데 오류가 사라졌습니다.


0

그래서 업데이트 후에도 같은 문제가 발생했습니다. key_file확장없이 PEM 을 사용하고 있었으며 단순히 .pem문제를 해결했습니다. 이제 파일은 key_file.pem.


0

SSH가 내장 된 Windows 10을 사용하는 경우 2020 년 8 월부터 ed25519 키만 지원합니다. key_load_public: invalid format예를 들어 RSA 키를 사용 하면 오류가 발생합니다.

이 GitHub의 문제를 하나 개의 솔루션은 단지 배에 업데이트가 나올 때까지 기다리는 것입니다 그래서 2020 년에 Windows Update를 통해 시간을 고정해야합니다.

기다릴 수 없다면 새로운 ed25519 키를 생성하는 것이 좋습니다 . 어쨌든 좋은 조언입니다 .

> ssh-keygen -o -a 100 -t ed25519

예를 들어 github와 함께 사용할 수 있지만 일부 구형 시스템은이 새로운 형식을 지원하지 않을 수 있습니다.

키를 생성 한 후 아래 기능 중 하나를 사용하는 경우 업데이트하는 것을 잊지 마십시오!

  1. ~\.ssh\config 여전히 이전 키를 가리킬 수 있습니다.
  2. ssh-add명령을 통해 ssh-agent에 새 키를 추가합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.