Então, há algum tempo, configurei um servidor na AWS e usei a chave SSH gerada. Eu salvei a chave no Lastpass e a recuperei com sucesso de lá antes, e a fiz funcionar. No entanto, depois de tentar isso novamente hoje, não consigo fazê-lo funcionar.
-rw------- 1 itsgreg users 1674 Jun 6 12:51 key_name
Já tentei ssh -i key_name
, ssh-keygen -f key_name
, mas nada funciona, sempre recebo esta mensagem de erro:
Load key "key_name": invalid format
Existe alguma maneira de corrigir isso?
A partir do openssh 7.6, o padrão é um novo formato mais seguro. Você pode forçá-lo a converter para esse formato usando os comandos abaixo para alterar sua senha de chave. Caso você não tenha e/ou não queira uma senha, basta pressionar enter e ainda reescreverá a chave no novo formato
Eu tive o mesmo problema, e acontece que eu tinha separadores de linha no estilo do Windows (CRLF) no arquivo por algum motivo.
Além disso, o arquivo deve terminar com um único LF.
Consertar essas coisas tornou as coisas elegantes novamente.
Verifique o conteúdo de
key_name
, se o agente disserinvalid format
que 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 format
se a chave estiver funcionando, você simplesmente não poderá se conectar. Você pode ter colocado sua chave pública lá, por algum motivo. Confira!Corrigi esse problema no Windows convertendo a chave privada para o formato OpenSSH usando o PuTTY Key Generator.
PuTTYgen
my.ppk
Conversions
|Export OpenSSH key
my_openssh.ppk
Agora isso funciona:
Conversão para Mac: (obrigado @ ChrisGillatt )
Se você receber um aviso sobre um formato de chave pública inválido, mas o comando ainda funcionar, pode ser porque você tem apenas um arquivo de chave privada e está usando o OpenSSH 8.3.
O OpenSSH 8.3 inclui uma mudança no cliente ssh onde ele procura o arquivo de chave pública correspondente da chave privada e gera este
load pubkey "/home/user/.ssh/id.rsa": invalid format
aviso, mas continua a se conectar com sucesso. Ferramentas que usam ssh, comoscp
ougit
podem mostrarkey_load_public: invalid format
.O cliente não precisa da chave pública ao se conectar, apenas da chave privada. Portanto, essa verificação é inútil e já foi removida por um commit upstream, mas não está em um relase (ainda).
Há uma discussão sobre isso no fórum do ArchLinux .
No meu caso, descobri que eu tinha novas linhas entre os "cabeçalhos" de início/fim e os dados principais:
Removendo as novas linhas extras, ficou
resolveu meu problema.
Acabei de me deparar com isso hoje quando estava escrevendo alguns utilitários de marcação git para meu pipeline de CI.
Aqui estava a diferença entre minhas duas chaves:
Alterei meu código assim:
E agora minha chave ssh funciona.
TL;DR - Acho que você precisa ter uma nova linha no final da sua chave privada.
Após uma atualização recente no Fedora 32, comecei a receber esses avisos ao me conectar a hosts remotos.
Resolvi o problema adicionando pkcs11: ao parâmetro IdentityFile no meu .ssh/config assim:
Para referência, trecho da página man ssh_config:
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
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 de acordo com 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 acontecer. Espero que ajude alguém.
No meu caso, isso estava acontecendo porque estava faltando uma linha em branco entre DEK-Info e os dados reais da chave. Eu tive:
Mas precisava ser: