Como adiciono uma senha a uma chave privada do OpenSSH que foi gerada sem uma senha?

213

Eu gerei uma chave privada OpenSSH usando puttygen (e a exportei no formato OpenSSH). Como posso colocar uma senha nessa chave existente (sei como gerar uma nova chave com uma senha)?

Conrad
fonte
13
Se você vir esse comentário, marque uma das respostas como aceita ou escreva um comentário dizendo o que eles perderam. Obrigado!
Benjamin Atkin
1
Adicionar é o mesmo que alterar ou remover: stackoverflow.com/questions/112396/… , possível o mesmo para alteração: serverfault.com/questions/50775/…
Ciro Santilli 2 冠状 病
Se você digitar Bad passphraseuma id_ed25519chave, mas a senha estiver correta, provavelmente está usando um nível inferior ssh-keygenpara gerenciá-la.
JWW

Respostas:

350

Experimente o comando ssh-keygen -p -f keyfile

Na página do manual ssh-keygen

 -p      Requests changing the passphrase of a private key file instead of
         creating a new private key.  The program will prompt for the file
         containing the private key, for the old passphrase, and twice for
         the new passphrase.

 -f filename
         Specifies the filename of the key file.

Exemplo:

ssh-keygen -p -f ~/.ssh/id_rsa
sigjuice
fonte
5
Para quem deseja saber o que é -f: especifica o arquivo de entrada.
Neikos
4
//, @sigjuice, você poderia postar um exemplo, como $ ssh-keygen -p -f /Users/sigjuice/.ssh/id_rsa? Isso pode ajudar as pessoas que não sabem diferenciar entre uma chave pública e uma chave privada e ajudá-las a molhar os pés mais rapidamente.
Nathan Basanese
Por alguma razão, no MacOS 10.14, isso não formata o arquivo com o Proc-Type: 4,ENCRYPTEDcabeçalho, o que é incompatível com alguns aplicativos que procuram uma senha. Depois de tentar várias maneiras de fazê-lo funcionar, a maneira mais fácil de solucionar isso era fazer a mesma coisa dentro de um contêiner do Docker executando o Ubuntu e depois copiar a chave de volta para o meu Mac.
Ryanbrainard
38

Use a opção -p para ssh-keygen. Isso permite alterar a senha em vez de gerar uma nova chave.

Mude a senha como mostra o sigjuice:

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

A senha necessária será a nova senha. (Isso pressupõe que você adicionou a chave pública ~/.ssh/id_rsa.pubaos seus arquivos allowed_keys.) Teste com ssh:

ssh -i ~/.ssh/id_rsa localhost

Você pode ter várias chaves com nomes diferentes para diferentes usos.

BillThor
fonte
//, Você poderia mostrar um exemplo e como verificar se a opção funcionou, @ BillThor?
Nathan Basanese
Eu não entendi. A senha está definida, vejo quando tento alterá-la novamente. Mas quando tento fazer login no servidor remoto, ele não solicita a senha da senha, por quê?
Luka
1
Está bem. Ele pede uma vez por sessão :) Não sabia disso.
Luka
Isso significa que você precisa sair e entrar novamente? Fechar a janela do terminal e reabri-la não funciona para mim.
Simon H
Você pode digitar ssh-add -Dpara remover sua identidade em cache. Em seguida, tente conectar-se novamente e ele solicitará sua senha. Use ssh-add -lpara ver uma lista de suas identidades em cache.
Scott Nedderman 26/03/19
3

Você também pode usar openssl:

openssl rsa -aes256 -in ~/.ssh/your_key -out ~/.ssh/your_key.enc
mv ~/.ssh/your_key.enc ~/.ssh/your_key
chmod 600 ~/.ssh/your_key

consulte: https://security.stackexchange.com/a/59164/194668

sharez
fonte
Acho que vou seguir o caminho do ssh-keygen ;)
Michael P. Bazos
Obrigado por fornecer uma alternativa openssl para executar a tarefa.
Nadjib Mami