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.


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. Vá 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.


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.


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


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


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 user@example.com -i my-openssh-key

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


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.


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


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


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

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.