Como converter pares de chaves SSH gerados usando PuTTYgen (Windows) em pares de chaves usados ​​pelo ssh-agent e Keychain (Linux)

464

Eu criei pares de chaves usando PuTTYgen e efetuei login usando o Pageant, para que eu precise digitar minha senha apenas uma vez quando o sistema inicializar.

Como faço para conseguir isso no Linux? Ouvi falar, keychainmas ouvi dizer que ele usa um formato de par de chaves diferente - não quero alterar minhas chaves do Windows e seria bom se eu pudesse conectar-me perfeitamente da mesma maneira no Windows e no Linux.

TCSGrad
fonte
Não deve haver nenhum problema ao usar as chaves no linux também ... apenas copie-as e adicione o pub às chaves autorizadas ... embora seja certo que eu não entendo completamente sua pergunta.
Randall Hunt
17
Não, existe - eu sei muito bem que os principais formatos usados ​​pelo PuttyGen e pelo ssh-agent são diferentes e precisam ser convertidos explicitamente - veja a resposta detalhada de Kaleb abaixo.
TCSGrad

Respostas:

714

puttygensuporta a exportação de sua chave privada para um formato compatível com OpenSSH. Você pode usar as ferramentas OpenSSH para recriar a chave pública.

  1. Open PuttyGen
  2. Clique em Carregar
  3. Carregue sua chave privada
  4. Conversions->Export OpenSSHe exporte sua chave privada
  5. Copie sua chave privada para ~/.ssh/id_dsa(ou id_rsa).
  6. Crie a versão RFC 4716 da chave pública usando ssh-keygen

    ssh-keygen -e -f ~/.ssh/id_dsa > ~/.ssh/id_dsa_com.pub
    
  7. Converta a versão RFC 4716 da chave pública no formato OpenSSH:

    ssh-keygen -i -f ~/.ssh/id_dsa_com.pub > ~/.ssh/id_dsa.pub
    

Veja isto e isto para mais informações.

Kaleb Pederson
fonte
12
Para quem tem It is required that your private key files are NOT accessible by otherserro como eu corri cd ~/.sshechmod 700 id_rsa
expert
77
Você quer dizer chmod 600 id_rsa . O arquivo não precisa ser executável. :)
sig11 12/11/12
2
Esta resposta foi a chave para obter o ssh na linha de comando do Windows usando chaves sem senha para mim (especificamente para acesso ao git). Teria me poupado horas de dor se eu tivesse visto antes! Obrigado!
Cori
2
O puttygen pode ser executado a partir da CLI?
CMCDragonkai
20
Suponho que isso seja algo novo, mas se você abrir sua chave privada em puttygen, ela mostrará automaticamente uma cadeia de chaves pública, copiável e compatível com OpenSSH na interface do usuário.
UpTheCreek
161

Se tudo o que você tem é uma chave pública de um usuário no formato PuTTY, você pode convertê-la para o formato openssh padrão da seguinte maneira:

ssh-keygen -i -f keyfile.pub > newkeyfile.pub

Referências

Cópia do artigo

Eu continuo esquecendo isso, então eu vou escrever aqui. Não-geeks, apenas continue andando.

A maneira mais comum de criar uma chave no Windows é usando Putty / Puttygen. Puttygen fornece um utilitário elegante para converter uma chave privada linux para o formato Putty. No entanto, o que não é abordado é que, quando você salva a chave pública usando o puttygen, ela não funciona em um servidor Linux. O Windows coloca alguns dados em diferentes áreas e adiciona quebras de linha.

A solução: quando você chegar à tela da chave pública ao criar seu par de chaves no puttygen, copie a chave pública e cole-a em um arquivo de texto com a extensão .pub. Você economizará horas sysadmin de frustração lendo posts como este.

NO ENTANTO, sysadmins, você invariavelmente obtém o arquivo de chave instável que não lança nenhuma mensagem de erro no log de autenticação, exceto, nenhuma chave encontrada, tentando a senha; mesmo que as chaves de todos os outros estejam funcionando bem, e você a enviou de volta ao usuário 15 vezes.

ssh-keygen -i -f keyfile.pub > newkeyfile.pub

Deve converter uma chave pública puttygen existente para o formato OpenSSH.

Bukzor
fonte
2
Além disso, você pode copiar o comentário do usuário da Comment:linha e colá-lo na mesma linha da nova chave, separada por um espaço. Não sei por que o ssh-keygen não fará isso por padrão.
Tobia
2
Isso me dá um erro de:decode blob failed: invalid format
Chris Stryczynski
Se você ler o artigo original, o detalhe da chave é que essa abordagem só funciona se você copiar a chave do puttygen ao passar pela interface do usuário, ela não converterá uma chave já gerada dos arquivos produzidos pelo puttygen.
SLM
Posso usar a mesma ferramenta para convertê-la de outra maneira?
Olle Härstedt 26/09/18
Sim, parece que você está olhando para: ssh-keygen -e -f openssh_key.pub> putty.pub
Erik
148

As versões mais recentes do PuTTYgen (a minha é 0,64) podem mostrar a chave pública OpenSSH a ser colada no sistema linux no .ssh/authorized_keysarquivo, conforme mostrado na imagem a seguir:

insira a descrição da imagem aqui

Zac
fonte
7
Esta resposta aborda como configurar a autenticação de chave em um controle remoto que usa o formato OpenSSH. Mas, para usar uma chave gerada por Putty em um cliente Linux , essa resposta é insuficiente. Eu segui a resposta aceita e funcionou esplendidamente.
wberry
52

Como alternativa, se você deseja obter as chaves públicas e privadas de um arquivo de chave formatado pelo PuTTY, pode usar puttygennos sistemas * nix. Para a maioria dos sistemas baseados em apt puttygenfaz parte do putty-toolspacote.

Saída de uma chave privada de um arquivo de chave formatado PuTTY:

$ puttygen keyfile.pem -O private-openssh -o avdev.pvk

Para a chave pública:

$ puttygen keyfile.pem -L

John Jawed
fonte
Se, por algum motivo, você DEVE fazer isso em uma caixa do Windows (não é possível transferir todas as chaves com segurança para um * nix) e tem tantas chaves usando a GUI que é complicado, tente compilar a fonte Unix no Cygwin. Esse puttygen.exe dará a você um "modo de lote" da CLI, como descrito acima.
Toddius Zho
2
OSX:brew install putty
Juha Palomäki
1
Isso deve ser revertido: puttygen inppk -O private-openssh -o outpeme puttygen inppk -L(ou ssh-keygen -y -f outpem)
dave_thompson_085
27
sudo apt-get install putty

Isso instalará automaticamente a ferramenta puttygen.

Agora, para converter o arquivo PPK a ser usado com o comando SSH, execute o seguinte no terminal

puttygen mykey.ppk -O private-openssh -o my-openssh-key

Em seguida, você pode conectar via SSH com:

ssh -v [email protected] -i my-openssh-key

http://www.graphicmist.in/use-your-putty-ppk-file-to-ssh-remote-server-in-ubuntu/#comment-28603

Purnendu Singh
fonte
Isso realmente não mostra mais do que, o que já está na resposta por @John Jawed
Martin Prikryl
Os argumentos explicam o que eles representam. 1
danronmoon
ÓTIMO! Isso funciona. Além disso, para instalar massa no MacOS: Brew instalar massa
Dylan B
14

Recentemente, tive esse problema ao passar do Putty para Linux para o Remmina para Linux. Portanto, tenho muitos arquivos PPK para Putty no meu .puttydiretório, pois o uso há 8 anos. Para isso, usei um forcomando simples para o bash shell fazer todos os arquivos:

cd ~/.putty
for X in *.ppk; do puttygen $X -L > ~/.ssh/$(echo $X | sed 's,./,,' | sed 's/.ppk//g').pub; puttygen $X -O private-openssh -o ~/.ssh/$(echo $X | sed 's,./,,' | sed 's/.ppk//g').pvk; done;

Muito rápido e direto ao ponto, fez o trabalho para todos os arquivos que a massa possuía. Se encontrar uma chave com uma senha, ela irá parar e solicitar a senha para essa chave primeiro e depois continuar.

jfreak53
fonte
2
Para ppl preguiçosas como eu, aqui é copiar e colar para se PuTTYgen no Ubuntu: sudo apt-get install putty-tools
Lennart Rolland
"simples" - eu odiaria ver complicado!
Alex Jansen
8

Provavelmente é mais fácil criar suas chaves no Linux e usar o PuTTYgen para converter as chaves no formato PuTTY.

PuTTY Faq: A.2.2

Bradley Kreider
fonte
14
Infelizmente, não é uma opção se você possui chaves existentes que precisa usar.
expert
6

Eu acho que o TCSgrad estava tentando perguntar (há alguns anos) como fazer o Linux se comportar como sua máquina Windows. Ou seja, existe um agente (concurso) que mantém uma cópia descriptografada de uma chave privada, para que a frase secreta precise ser inserida apenas uma vez. Em seguida, o cliente ssh, putty, pode efetuar login nas máquinas nas quais sua chave pública está listada como "autorizada" sem um prompt de senha.

O análogo disso é que o Linux, agindo como um cliente ssh , possui um agente que possui uma chave privada descriptografada, de modo que quando o TCSgrad digita "ssh host", o comando ssh obtém sua chave privada e continua sem ser solicitada uma senha. o host, é claro, teria que estar segurando a chave pública em ~ / .ssh / allowed_keys.

O analógico do Linux para esse cenário é realizado usando o ssh-agent (o analógico do concurso) e o ssh-add (o analógico para adicionar uma chave privada ao concurso).

O método que funcionou para mim foi usar: $ ssh-agent $ SHELL Esse $ SHELL foi o truque de mágica que eu precisava para fazer o agente rodar e continuar rodando. Descobri isso em algum lugar da rede e terminou algumas horas batendo minha cabeça contra a parede.

Agora temos o análogo do concurso em execução, um agente sem chaves carregadas.

Digitar $ ssh-add por si só adicionará (por padrão) as chaves privadas listadas nos arquivos de identidade padrão em ~ / .ssh.

Um artigo da web com muito mais detalhes pode ser encontrado aqui

kovacsbv
fonte
0

PPK → OpenSSH RSA com PuttyGen & Docker.

Chave privada:

docker run --rm -v $(pwd):/app zinuzoid/puttygen private.ppk -O private-openssh -o my-openssh-key

Chave pública:

docker run --rm -v $(pwd):/app zinuzoid/puttygen private.ppk -L -o my-openssh-key.pub

Veja também https://hub.docker.com/r/zinuzoid/puttygen

Uriy MerkUriy
fonte