Como recupero a chave pública de uma chave privada SSH?

444

Uma chave privada SSH conforme gerada por ssh-keygencontém uma parte da chave pública. Como recupero essa chave pública da chave privada? Perdi minha chave pública e preciso colocar o conteúdo dessa chave pública no authorized_keysarquivo de servidores e não quero criar um novo par de chaves.

Como alternativa: como faço para criar o id_rsa.pubarquivo a partir de um id_rsaarquivo?

Lekensteyn
fonte
pbcopy > ~/.ssh/id_rsa.puboops.
Nick T
@NickT - pbcopy é um comando do MacOSX. Além disso, é inútil se você tiver reiniciado, desconectado ou copiado qualquer outra coisa na área de transferência.
Jsnfwlr # 9/18

Respostas:

681

Encontrei a resposta em Falha no servidor: Crie uma chave SSH pública a partir da chave privada?

A opção -ygera a chave pública:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

Como uma observação lateral, o comentário da chave pública é perdido. Como eu tinha um site que exigia o comentário (Barra de Ativação?), É necessário editar ~/.ssh/id_rsa.pube anexar um comentário à primeira linha com um espaço entre o comentário e os dados principais. Um exemplo de chave pública é mostrado truncado abaixo.

ssh-rsa AAAA..../VqDjtS5 ubuntu@ubuntu

Para chaves que foram adicionadas ao SSH Agent (um programa executado em segundo plano e evita a necessidade de inserir novamente a senha do arquivo de chave repetidamente), você pode usar o ssh-add -Lcomando para listar as chaves públicas das chaves adicionadas a o agente (via ssh-add -l). Isso é útil quando a chave SSH é armazenada em um cartão inteligente (e o acesso ao arquivo de chave privada não é possível).

Lekensteyn
fonte
1
Observe que seu arquivo de chave privada ~/.ssh/id_rsadeve estar restrito ao seu nome de usuário. use $ sudo chmod 600 ~/.ssh/id_rsae insira suas credenciais raiz para restringi-la, e você poderá gerar o arquivo de chave pública. Caso contrário, você receberá um aviso irrestrito de arquivo de chave privada.
Mark Mikofski
12
@MarkMikofski Não é necessário sudo, você já deve possuir a chave privada. Caso contrário, você não poderá lê-lo em primeiro lugar.
Lekensteyn
7
@Lekensteyn obrigado, é claro que você está certo !. Também 400é recomendado, pois não é necessário gravar no arquivo de chave privada do tipo. O comando corrigido deve ser #$ chmod 400 ~/.ssh/id_rsa
Mark Mikofski 6/15
O comentário da chave privada é perdido. Veja stackoverflow.com/questions/38290929/…
weberjn
1
@weberjn A chave privada ( id_rsaarquivo) não possui um comentário, mas, na verdade, o comentário no arquivo de chave pública ( id_rsa.pub) é perdido.
Lekensteyn
14

Esta é uma solução especificamente para usuários que usam Windows para SSH em suas máquinas remotas, incluindo imagens em nuvem no Amazon AWS e GCE.

(Aviso Legal)

Recentemente, usei essa solução para efetuar logon remoto em novas imagens de VM implantadas no GCE.


Ferramentas usadas:

  1. puttygen
  2. WinSCP

Etapas para executar:

  1. Gere um par de chaves pública / privada usando puttygen.
  2. Carregue uma chave pública no seu servidor na nuvem ou local remoto.

Descrição (como fazer):

  1. Gere uma chave / par ou use uma chave privada existente:

    Se você possui uma chave privada:

    Abra o puttygen, pressione o botão carregar e selecione seu arquivo de chave privada (* .pem).

    Se você não possui uma chave privada:

    • Open puttygen,
    • Selecione o tipo de chave desejado SSH2 DSA (você pode usar RSA ou DSA) na seção Parâmetros ... e é importante deixar o campo de senha em branco,
    • Pressione gerar e siga as instruções para gerar o par de chaves (público / privado).

    Imagem de geração de chave de amostra

  2. Crie um novo arquivo 'allowed_keys' (com o Bloco de notas):

    Copie seus dados de chave pública da seção "Chave pública para colar no arquivo OpenSSH allowed_keys" do PuTTY Key Generator e cole os dados da chave no arquivo "allowed_keys".

    Verifique se há apenas uma linha de texto nesse arquivo.

  3. Carregue a chave em um servidor Linux:

    • Abra o WinSCP,
    • Selecione o protocolo de arquivo SFTP e efetue login com suas credenciais SSH.
    • Em caso de sucesso, você verá a estrutura do diretório inicial em sua máquina remota.

    Carregue o arquivo allowed_keys no diretório inicial na máquina remota.

  4. Defina permissões apropriadas:

    Crie um .sshdiretório (se não existir)

    Copie o authorized_keysarquivo no diretório .ssh (isso substituirá qualquer authorized_keysarquivo existente ; observe isso).

    Se o arquivo existir, basta adicionar o conteúdo desse arquivo ao arquivo existente.

    Execute comandos para definir permissões:

    sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
    

Agora você poderá fazer o ssh em uma máquina remota sem inserir credenciais todas as vezes.

Leitura adicional:

  1. Gerando e carregando chaves SSH no Windows

  2. Autenticação sem senha usando a chave OpenSSH, certificados .pem e .pub

devprashant
fonte
Se o seu diretório pessoal estiver criptografado, faça o seguinte: askubuntu.com/questions/439184/…
devprashant
2
embora sua resposta não seja realmente relevante para a questão, voto por ela devido ao seu entusiasmo.
Truong Nguyen