Converter chave privada OpenSSH em chave privada SSH2

29

Existe uma maneira de converter o par existente de chaves OpenSSH no par de chaves SSH2 (formato ssh.com)?

UPD : como existem algumas respostas sobre o ssh-keygensurgimento repentino, vou explicar de onde vim (também será uma boa resposta sobre "o que você tentou?").

$> diff --report-identical-files <(ssh-keygen -e -f ~/.ssh/id_dsa) <(ssh-keygen -e -f ~/.ssh/id_dsa.pub)
Files /tmp/zshAGGWAK and /tmp/zshPZiIr6 are identical

Em outras palavras, ssh-keygenretorna as mesmas chaves para as chaves de entrada pública e privada (os hashes dos arquivos originais são obviamente diferentes, eu os verifiquei duas vezes para garantir que sejam chaves públicas e privadas válidas). Parece que ssh-keygengera apenas chave pública para chave de entrada pública ou privada.

Estou fazendo errado ou é um comportamento normal?

ДМИТРИЙ МАЛИКОВ
fonte

Respostas:

43

Este tutorial intitulado: SSH: converta OpenSSH para SSH2 e vice-versa parece oferecer o que você está procurando.

Converter chave OpenSSH em chave SSH2

Execute a versão do OpenSSH ssh-keygenna sua chave pública do OpenSSH para convertê-la no formato necessário ao SSH2 na máquina remota. Isso deve ser feito no sistema executando o OpenSSH.

$ ssh-keygen -e -f ~/.ssh/id_dsa.pub > ~/.ssh/id_dsa_ssh2.pub

Converter chave SSH2 em chave OpenSSH

Execute a versão do OpenSSH ssh-keygenna sua chave pública ssh2 para convertê-la no formato necessário ao OpenSSH. Isso precisa ser feito no sistema executando o OpenSSH.

$ ssh-keygen -i -f ~/.ssh/id_dsa_1024_a.pub > ~/.ssh/id_dsa_1024_a_openssh.pub

O tutorial continua mostrando como gerar os vários tipos de chaves e como exportá-los para outros formatos.

Use isso para chaves públicas e privadas?

De acordo com a página do manual, a resposta seria um sim. Olhando para a página de manual, ssh-keygenele afirma o seguinte para a -eopção:

 -e    This option will read a private or public OpenSSH key file and print
       the key in RFC 4716 SSH Public Key File Format to stdout.  This option
       allows exporting keys for use by several commercial SSH implementations.

Mas, na prática, parece que ssh-keygennão é possível converter chaves privadas, apenas públicas.

Por exemplo:

# Make a new RSA key-pair
$ ssh-keygen -t rsa -f newkey

# attempt to extract the private key
$ ssh-keygen -e -f newkey > newkey_e

# attempt to extract the public key
$ ssh-keygen -e -f newkey.pub > newkey.pub_e

# Notice the supposed extracted private key (newkey_e) and the corresponding extracted public key (newkey.pub_e) have identical `md5sum`'s.
$ for i in *;do md5sum $i;done
d1bd1c12c4a2b9fee4b5f8f83150cf1a  newkey
8b67a7be646918afc7a041119e863be5  newkey_e
13947789d5dcc5322768bd8a2d3f562a  newkey.pub
8b67a7be646918afc7a041119e863be5  newkey.pub_e

Observar as chaves extraídas resultantes confirma isso:

$ grep BEGIN newkey_e newkey.pub_e 
newkey_e:---- BEGIN SSH2 PUBLIC KEY ----
newkey.pub_e:---- BEGIN SSH2 PUBLIC KEY ----

Pesquisando um pouco no Google, deparei-me com este resumo de um artigo intitulado: Como você converte arquivos de chave privada do OpenSSH em SSH . O site parecia estar desativado, mas, procurando no cache do Google por esta página , encontrei o seguinte sinopse:

Como você converte os arquivos de chave privada do OpenSSH em arquivos de chave privada do SSH.com?

Isso não pode ser feito pelo programa ssh-keygen, embora a maioria das páginas de manual diga que sim. Eles o desencorajam, para que você use várias chaves públicas. O único problema é que o RCF não permitirá que você registre mais de uma chave pública.

O artigo continua abordando um método para converter uma chave privada openssh em uma chave privada ssh.com através do uso da ferramenta PuTTY puttygen . NOTA: puttygen pode ser executado no Windows e Linux.

Abra 'puttygen' e gere um par de chaves pública / privada de 2048 bits rsa. Certifique-se de adicionar uma senha após ser gerada. Salve a chave pública como "puttystyle.pub" e salve a chave privada como "puttystyle". O programa putty e os programas SSH.com compartilham um formato de chave pública comum, mas o programa putty e o OpenSSH têm diferentes formatos de chave pública. Voltaremos a isso mais tarde. Você deve poder carregar as duas chaves de estilo de massa no programa de massa. No entanto, os formatos de chave privada para putty e SSH.com não são os mesmos e, portanto, você precisará criar um arquivo convertido. Vá para o menu de conversões e exporte uma chave SSH.com. Salve-o como "sshstyle". Agora volte ao menu de conversões e exporte uma tecla openssh. Salve-o como "openssh". Esses nomes são arbitrários e você pode escolher os seus. Você precisará alterar os nomes para instalação em uma máquina OpenSSH posteriormente. Ver abaixo.

Dado o exposto, elaborei o seguinte usando puttygen, usando nosso par de chaves openssh privado / público gerado anteriormente:

# generate ssh.com private key from private openssh key
$ puttygen newkey -O private-sshcom -o newkey.puttygen-sshcom

# generate ssh.com public key from private openssh key
$ puttygen newkey -O public -o newkey.pub_puttygen-sshcom

# generate openssh public key from private openssh key (for confirmation)
$ puttygen newkey -O public-openssh -o newkey.pub_puttygen-openssh

Os comentários são diferentes, então você não pode apenas comparar os arquivos resultantes; portanto, se você observar as primeiras linhas das teclas, é um bom indicador de que os comandos acima foram bem-sucedidos.

Comparação de chaves públicas do ssh.com:

$ tail -n +3 newkey.pub_e | head -1 | cut -c 1-60
AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wb

$ tail -n +3 newkey.pub_puttygen-sshcom | head -1 | cut -c 1-60
AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wb

Comparação de chaves openssh públicas:

$ cut -c 1-100 newkey.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wbz9x/w6I2DmSZVI9TJa6M9jgGE952QsOY

$ cut -c 1-100 newkey.pub_puttygen-openssh 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wbz9x/w6I2DmSZVI9TJa6M9jgGE952QsOY
slm
fonte
3
e quanto à conversão de chave privada ?
ДМИТРИЙ МАЛИКОВ
@ ДМИТРИЙМАЛИКОВ - por que isso importa? Eu tentei e parece funcionar para as chaves privadas ou públicas.
slm
11
Não tenho certeza que ele retorna a chave privada válida para mim: $> a="$(ssh-keygen -e -f ~/.ssh/id_rsa)m"; b="$(ssh-keygen -e -f ~/.ssh/id_rsa.pub)m"; md5sum <<< $a; md5sum <<< $b ce615aa3e39e274d0bd81064399cedf8 - ce615aa3e39e274d0bd81064399cedf8 -. Hashes de arquivos originais são diferentes, obviamente. Parece que ele retorna a chave pública para a chave de entrada pública ou privada.
ДМИТРИЙ МАЛИКОВ
@ ДМИТРИЙМАЛИКОВ - veja minhas atualizações para a resposta. Você está correto ssh-keygenao devolver chaves públicas. Eu elaborei um método baseado em pesquisas adicionais. LMK se for aceitável.
slm
1
Os atributos puttygen podem ser complicados: puttygen <OpenSSH_priv_key> -O public -o id_rsa_ssh2_puttygen{.pub}( -Osignifica tipo de saída e arquivo de-o saída ). Isso gera chaves públicas e privadas ssh2 a partir de uma chave privada rsa de 2048 bits gerada pelo OpenSSH 7.0. Não está funcionando no cliente Win Phone 7.5 (* O cliente SSH de Tommi Pirttiniemi). Mas obrigado a @ ДМИТРИЙМАЛИКОВ e @slm por uma ótima resposta de qualquer maneira. @Otheus puttygen vem com o Arch. putty
Tuk0z 14/10/2015
1

ssh-keygennão exportará uma chave privada no formato pem, mas converterá uma chave privada openssh existente para o formato pem, substituindo o original. Tudo que você precisa fazer é editar a senha.

O comando para converter seu ~/.ssh/id_rsaarquivo do formato OpenSSH para o formato SSH2 (pem) é:

ssh-keygen -p -f ~/.ssh/id_rsa -m pem

Em seguida, forneça a senha (antiga) e a nova no prompt. Eles podem ser os mesmos ou até ambos ficarem em branco. Ou você pode fornecê-los na linha de comando usando as opções -P(frase antiga) e -N(nova frase secreta). Por exemplo, se a senha estiver em branco e você desejar mantê-la dessa maneira:

ssh-keygen -p -P '' -N ''-f ~/.ssh/id_rsa -m pem
user43957
fonte