SSH Subitamente retornando formato inválido


23

Há algum tempo, configurei um servidor na AWS e usei a chave SSH gerada. Salvei a chave no Lastpass e a recuperei com sucesso de lá antes e a coloquei em funcionamento. No entanto, depois de tentar novamente hoje, não consigo fazê-lo funcionar.

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

Eu tentei ssh -i key_name, ssh-keygen -f key_namemas nada funciona, eu sempre recebo esta mensagem de erro:

Load key "key_name": invalid format

Existe alguma maneira de corrigir isso?

Respostas:


13

Verifique o conteúdo de key_name, se o agente diz invalid format, há algo errado com a chave - como .. você tem certeza de que é a chave correta? Mesmo que não seja a chave privada que você precisa, o agente ssh não retornará invalid formatse a chave estiver funcionando, você simplesmente não poderá se conectar. Você pode ter colocado sua chave pública lá, por algum motivo. Verifique-o!


5
Definitivamente verificado. Começa com ----BEGIN RSA PRIVATE KEY-----e termina com -----END RSA PRIVATE KEY-----. Além disso, costumava funcionar.
Gregor Menih

11
Um altamente improvável, mas ainda possível, é que o arquivo esteja corrompido. Crie um novo e preencha o conteúdo novamente do lastpass.
13dimitar

2
Uau, isso realmente ajudou! Depois de gerar a nova chave, notei que a nova chave tinha 64 caracteres por linha, enquanto minha chave antiga tinha 76. Reformatei minha chave antiga para ter apenas 64 caracteres por linha, e ela começou a funcionar! Também estava faltando um traço da primeira linha.
Gregor Menih

2
"Também estava faltando um traço da primeira linha". Idem. Obrigado @ItsGreg por isso. Sinto muita falta do primeiro caractere ao selecionar e copiar entre terminais!
Starfry # 30/18

15

O que eu fiz para corrigir esse problema é que eu uso para converter o arquivo PPK usando PuttyGen.

Primeiro carregue o e urkey.PPK, em seguida, no menu de conversão, clique em exportar para o formato de arquivo Openssh. Ele criará o arquivo newkey.

agora, ssh -i "newkey" user@127.0.0.1

Feito. Espero que ajude.


4

Eu estava pedindo ao openssh para usar um arquivo de identidade específico, especificando-o no arquivo .ssh / config.

A configuração de trabalho original tinha

IdentityFile = <path to public key file> 

Isso parou de funcionar sem nenhuma alteração. Pensando um pouco, substituí o "caminho para o arquivo de chave pública" acima por "caminho para o arquivo de chave privada". Isso funcionou. O raciocínio é que os arquivos de chave pública e privada têm grandes números relacionados ao peudoprime, conforme o algoritmo RSA. Se você substituir o arquivo de chave privada pelo arquivo de chave pública, esses números criptográficos não serão extraídos corretamente do bloco base64 salvo nos arquivos de chave. Parece que algumas versões do ssh podem descobrir a extensão .pub e usá-la para identificar o arquivo de chave privada correto - e outras versões não fazem isso. Essa é outra maneira pela qual esse erro pode ocorrer. Espero que ajude alguém.


No meu caso, eu tinha o configarquivo de instalação path_to_public_keye tudo estava funcionando. No entanto, quando o mac fez uma reinicialização forçada e, alguns dias depois, tentei fazer um git push, comecei a receber o erro mencionado acima. Mas quando agora mudei para as path_to_private_keycoisas estão funcionando ... Hmmm. Não sei por que ..
lukik

3

Eu tive o mesmo problema e, por algum motivo, havia separadores de linha no estilo Windows (CRLF) no arquivo.

Além disso, o arquivo deve terminar com um único LF.

Consertar aqueles tornou as coisas dândi novamente.


É chocante que esse LF final seja tão necessário, mas foi de fato parcialmente o problema, com a outra parte que eu criei o arquivo no Windows e, ao fazê-lo, causa quebras de linha CRLF. Para referência de outros, dos2unixé o comando para converter de quebras de linha CRLF (estilo Windows) para LF (estilo Linux).
Hashim

1

Você deve converter sua chave .ppk em chave OpenSSH

Aqui está como você faz isso :

  1. Faça o download do PuttyGen e gere seu par de chaves (se você não tiver o par de chaves pronto). Salve a chave privada na sua pasta (.ppk)
  2. Se você já possui a chave privada, carregue o arquivo de chave privada (.ppk) pressionando o botão "Carregar". Caso contrário, pule esta etapa
  3. No menu "Conversões", escolha Exportar chave OpenSSH e salve-a na sua pasta
  4. Agora você está pronto para usar a chave para efetuar login no servidor sem digitar a senha (suponho que você já colocou a chave pública em /root/.ssh/authorized_keys, chmod 600 /root/.ssh/authorized_keys e demônio SSH reiniciado)

1

Eu me deparei com isso hoje, quando estava escrevendo alguns utilitários de marcação git para o meu pipeline de CI.

Aqui estava a diferença entre minhas duas chaves:

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

Mudei meu código da seguinte maneira:

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

E agora minha chave ssh funciona.

TL; DR - acho que você precisa ter uma nova linha no final da sua chave privada.


1

No meu caso, ocorreu que eu tinha novas linhas entre os "cabeçalhos" de início / fim e os dados principais:

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

- Key data here -

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

Removendo as novas linhas extras, tornou-se

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

resolveu meu problema.


0

Use sua chave privada em vez da chave pública.


mesma solução que a minha resposta - onde também é adicionado uma explicação
vpathak

0

Eu tive esse problema porque tinha uma chave no ~ / .ssh que na verdade era um formato inválido e tinha muitas chaves, o que significava que o SSH estava tentando todas elas, apesar de ter especificado o meu arquivo de identidade no comando. Acontece que ele falha, porque ele só pode tentar 5 chaves e, em seguida, me deixou com esse erro, que era legítimo, apenas para o arquivo de identidade errado. A solução foi usar apenas IdentitiesOnly yesno meu ~ / .ssh / config.


0

Eu tive esse erro porque havia uma linha em branco no início do arquivo-chave. É fácil perder se você estiver catusando.


0

Esse também é o erro que o ssh (pelo menos algumas versões) emite se você tiver uma senha na sua chave privada e insira a senha incorretamente ao tentar conectar-se.

(Em particular, isso aconteceu comigo: OpenSSH_7.6p1, LibreSSL 2.6.2, que é o SSH embutido no Mac OS X 10.13.6.)

Portanto, verifique se você está usando a senha correta e se o CAPS LOCK está desativado.


-2

Renomeie sua chave PRIVATE e remova a extensão do arquivo que é o problema.

Passos que tomei

Crie sua chave pública:

Verifique se você está no mesmo diretório que possui a chave privada

Como criar a chave pública:

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

verifique se a chave PUBLIC possui uma extensão de arquivo .pub

depois disso, forneça permissões apropriadas por motivos de segurança:

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

ENTÃO a parte mais importante e o motivo pelo qual você recebeu o erro "formato inválido"

Renomeie sua chave PRIVATE e remova a extensão do arquivo:

Remova o .pem da sua chave privada.

mv Private-Key.pem Private-Key

ou, se em um computador Windows renomear a chave privada, o mesmo nome basta remover o .pem

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.