Como obter um arquivo .pem do par de chaves ssh?

33

Criei um par de chaves usando ssh-keygen e obtive os dois clássicos id_rsa e id_rsa.pub.

Importei a chave pública para minha conta do AWS EC2.

Agora, criei uma instância do Windows e, para descriptografar a senha da instância, o console da AWS está solicitando um arquivo .pem. Como posso obter esse arquivo .pem dos meus dois arquivos id_rsa e id_rsa.pub?

gsi-frank
fonte
2
A chave privada já está no formato PEM e pode ser usada como está.
Michael Hampton
@ MichaelHampton, isso dependerá da versão do ssh-keygen e do comando usado para gerar o par de chaves. Algumas versões usam o RFC4716 por padrão, em vez do PEM.
de Austin

Respostas:

44

De acordo com isso , este comando pode ser usado:

ssh-keygen -f id_rsa -e -m pem

Isso converterá sua chave pública em um formato compatível com OpenSSL. Sua chave privada já está no formato PEM e pode ser usada como está (como Michael Hampton afirmou).

Verifique se AWS não está pedindo um (X.509) certificado no formato PEM, que seria uma coisa diferente do que suas chaves SSH.

fuero
fonte
Mas eles não precisam da chave pública, precisam? Eles precisam da chave privada para descriptografar a senha do Console AWS
Michael Bailey
Não faço ideia para que OP isso é necessário.
fuero
Não sabe ao certo o quanto você está familiarizado com a AWS, mas quando você cria uma instância do Windows (basicamente servidor), a AWS mantém a senha de você até você fornecer sua chave privada. Em seguida, eles fornecem a senha do servidor. Dessa forma, os servidores Windows e Linux na AWS dependem de chaves privadas.
Michael Bailey
1
Isso não funciona no OS X (ssh -v ==> OpenSSH_6.2p2)
ChrisH
3
ao contrário da documentação, ele produzirá a chave PUBLIC no formato PEM, não a privada. Atualmente, o ssh-keygen não suporta a conversão de chaves privadas.
morgwai
21

Usar ssh-keygenpara exportar a chave no formato .pem funcionou para mim.

ssh-keygen -f id_rsa.pub -m 'PEM' -e > id_rsa.pem

Em seguida, basta copiar a .pemchave, conforme necessário.

Para referência:

  • a -f id_rsa.pubparte indica o arquivo de entrada para leitura
  • -m 'PEM indica um tipo de arquivo PEM
  • a -eopção indica que a saída será exportada
Matt
fonte
5

id_rsa é o arquivo que você deve usar para descriptografar a senha da instância do Windows EC2, mas verifique se o arquivo copiado e colado não está protegido por frase.

Resolvi o problema de obter um id_rsaarquivo temporariamente desprotegido com algo como:

$ openssl rsa -in ~/.ssh/id_rsa -out tmp_file.pem
gsi-frank
fonte
2

Inicialmente, ao usar ssh-keygen, pude gerar uma chave pública compatível com o AWS EC2, mas tive problemas com a criação de chaves privadas compatíveis. A seguir, são criados pares de chaves públicas e privadas compatíveis com o AWS EC2.

ssh-keygen -P "" -t rsa -b 4096 -m pem -f my-key-pair

Aqui estão as informações sobre cada parâmetro:

  • -P: é para senha. Intencionalmente definido como vazio.
  • -t: especifica o tipo de chave a ser criada. O par de chaves do AWS EC2 requer RSA. A minha experiência diz respeito à chave pública criada.
  • -b: especifica o número de bits na chave. Os comprimentos suportados são 1024, 2048 e 4096. Se você se conectar usando SSH enquanto usa a API de conexão de instância do EC2, os comprimentos suportados serão 2048 e 4096.
  • -m: especifica um formato de chave para geração de chaves. Definir um formato de "PEM" ao gerar um tipo de chave privada compatível fará com que a chave seja armazenada no formato de chave privada PEM herdada. O par de chaves do AWS EC2 precisa do formato herdado
  • -f: especifica o nome do arquivo de saída do arquivo-chave

Recursos:

Para obter mais informações sobre ssh-keygen, consulte:  https://man.openbsd.org/ssh-keygen.1

AWS - Pares de chaves do EC2 -  https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html

Mike Barlow - BarDev
fonte
Mike optou por não incluir documentação para a opção '-b'. Talvez óbvio para alguns, isso significa "criptografia de 4096 bits, por favor". Conforme declarado no documento da AWS vinculado, "Os comprimentos suportados são 1024, 2048 e 4096. Se você se conectar usando SSH enquanto usa a API de conexão de instância do EC2, os comprimentos suportados serão 2048 e 4096".
nclark 23/10
@ nclard, não sei por que deixei esse parâmetro -b. Apenas adicionei.
Mike Barlow - BarDev
0

Ao iniciar uma instância do EC2, você atribui a ela um par de chaves (ou nenhum). Não pode ser alterado depois.

Somente usando esse arquivo .pem desse par de chaves você poderá descriptografar a senha do Windows.

O arquivo .pem teria sido baixado quando o par de chaves foi criado. Você não pode obtê-lo novamente. Se você o perdeu, está sem sorte.

Você não pode usar um arquivo .pem que você próprio gerou, a menos que tenha importado essa chave para a AWS antes da inicialização da instância e a tenha atribuído à instância.

Simplificando, se você não tiver o arquivo .pem original, não poderá obter a senha.

Editar: depois de reler a pergunta, percebo que o OP importou sua chave para a AWS.

Matt Houser
fonte