Como removo a senha da chave SSH sem precisar criar uma nova chave?

1034

Defino uma senha ao criar uma nova chave SSH no meu laptop. Mas, como sei agora, isso é bastante doloroso quando você está tentando confirmar ( Git e SVN ) em um local remoto através do SSH várias vezes em uma hora.

Uma maneira de pensar é em excluir minhas chaves SSH e criar novas. Existe uma maneira de remover a senha, mantendo as mesmas chaves?

btbytes
fonte
9
Eu acho que a resposta estrita é realmente a resposta de Torsten Marek. O truque do ssh-agent pode ser o que você está procurando, mas é uma resposta para uma pergunta diferente.
tardate 22/09/08
1
A senha não é apenas uma chave para desbloquear a chave SSH privada, mas uma parte do mecanismo de criptografia. Uma parte é a sua chave SSH, outra - a senha inserida manualmente. Somente se as duas partes estiverem corretas, a chave composta gerada em tempo real será válida. Portanto, outra senha corresponde a outra chave SSH (e nenhuma senha é um caso especial de "outra senha").
Paul
97
Fechar essas perguntas é como debater se os efeitos colaterais nas linguagens de programação devem ser permitidos porque são "puros" ou não. Os puristas sempre ficam loucos, enquanto os outros não dão a mínima, porque é um recurso útil e facilita a vida. O ssh é necessário, mesmo difícil, não está estritamente relacionado à programação ... não feche essas perguntas. : |
sjas 28/08

Respostas:

1933

Resposta curta:

$ ssh-keygen -p

Isso solicitará que você insira o local do arquivo de chave, a senha antiga e a nova senha (que pode ser deixada em branco para não ter senha).


Se você quiser fazer tudo em uma linha sem avisos, faça:

$ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

Importante: Cuidado ao executar comandos, eles normalmente serão registrados no seu ~/.bash_historyarquivo (ou similar) em texto sem formatação, incluindo todos os argumentos fornecidos (por exemplo, as senhas neste caso). Portanto, é recomendável que você use a primeira opção, a menos que tenha um motivo específico para fazer o contrário.

Observe, no entanto, que você ainda pode usá-lo -f keyfilesem precisar especificar -Pnem -Ne que o arquivo de chave é padronizado como ~/.ssh/id_rsa, portanto, em muitos casos, nem é necessário.

Você pode considerar o uso de ssh-agent, que pode armazenar em cache a senha por um tempo. As versões mais recentes do gpg-agent também suportam o protocolo usado pelo ssh-agent.

Torsten Marek
fonte
464
Para ser explícito: você pode simplesmente rodar ssh-keygen -pem um terminal. Ele solicitará um arquivo de ~/.ssh/id_rsachave ( o arquivo correto é o padrão para mim ), a senha antiga (digite o que você tem agora) e a nova senha (não insira nada).
Henrik N
34
Ex. :ssh-keygen -p -P oldpassphrase -N "" -f ~/.ssh/id_rsa
Fedir RYKHTIK
24
-1 para fazer o usuário digitar sua senha no terminal e torná-la acessível através ~/.bash_history. É melhor digitar:$ cd ~/.ssh && ssh-keygen -f id_dsa -p
betoharres 26/09/16
5
Vocês devem observar que, se você digitar o comando no shell, iniciará um espaço (branco) que não será registrado no ~/.bash_hstoryIe. use `ssh-keygen -p -P oldpassphrase -N" "-f ~ / .ssh / id_rsa` e você estará bem (a menos que você tenha outro keylogger). Você também pode se livrar do registro da história ..
Huge
14
Pode valer a pena adicionar uma linha dizendo que isso substituirá o arquivo existente e não solicitará um novo local.
Lars Francke
46

$ ssh-keygen -p trabalhou para mim

Git bash aberto. Colado:$ ssh-keygen -p

Pressione Enter para o local padrão.

Digite a senha antiga

Digite uma nova senha - EM BRANCO

Confirmar nova senha - EM BRANCO

BOOM, a dor de digitar a senha para o git push desapareceu.

Obrigado!

Karan
fonte
Se, quando você pressionar Enter $ ssh-keygen -pe sua chave não estiver no local padrão, digamos (/Users/yourname/.ssh/id_rsa), você poderá responder colocando /Users/yourname/.ssh/yourkeyquando solicitado
Chigozie Orunta
37

Você pode adicionar o seguinte ao seu .bash_profile (ou equivalente), que inicia o ssh-agent no login.

if [ -f ~/.agent.env ] ; then
    . ~/.agent.env > /dev/null
    if ! kill -0 $SSH_AGENT_PID > /dev/null 2>&1; then
        echo "Stale agent file found. Spawning new agent… "
        eval `ssh-agent | tee ~/.agent.env`
        ssh-add
    fi 
else
    echo "Starting ssh-agent"
    eval `ssh-agent | tee ~/.agent.env`
    ssh-add
fi

Em algumas distribuições Linux (Ubuntu, Debian) você pode usar:

ssh-copy-id -i ~/.ssh/id_dsa.pub username@host

Isso copiará o ID gerado para uma máquina remota e o adicionará ao chaveiro remoto.

Você pode ler mais aqui e aqui .

mlambie
fonte
7
A distribuição moderna não inicia um agente ssh imediatamente?
Troels Arvin
Em algumas distribuições Linux (Ubuntu, Debian) você pode usar: ssh-copy-id -i ~ / .ssh / id_dsa.pub nome de usuário @ host Supondo que você tenha acesso a essa maneira. E embora seja de 2008, talvez deva ser editado para se referir ao id_rsa.pub (sim, eu poderia editá-lo, mas não me sinto à vontade em fazer isso com os trabalhos de outras pessoas - e isso vale para algo assim).
Pryftan #
@TroelsArvin Yes. Mas há momentos em que ele é morto (embora a circunstância que me deparei não me lembre - a menos que talvez o X11 tenha um problema e você precise reiniciá-lo ... esse pode ser um exemplo). Nesse caso, você precisa 'recriá-lo'.
Pryftan #
8

Para alterar ou remover a senha, geralmente acho mais simples passar apenas os sinalizadores pe f, em seguida, deixe o sistema solicitar que eu forneça as senhas:

ssh-keygen -p -f <name-of-private-key>

Por exemplo:

ssh-keygen -p -f id_rsa

Digite uma senha vazia se desejar remover a senha.

Uma amostra de execução para remover ou alterar uma senha é mais ou menos assim:

ssh-keygen -p -f id_rsa
Enter old passphrase: 
Key has comment 'bcuser@pl1909'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

Ao adicionar uma senha a uma chave que não tem senha, a execução se parece com isso:

ssh-keygen -p -f id_rsa
Key has comment 'charlie@elf-path'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.
ccalvert
fonte
3

No Windows, você pode usar o PuttyGen para carregar o arquivo de chave privada, remover a frase secreta e substituir o arquivo de chave privada existente.

Ajit Goel
fonte
2

No Mac, você pode armazenar a senha da sua chave ssh privada no seu Keychain, o que torna transparente o uso dela. Se você estiver conectado, ele estará disponível; quando você estiver desconectado, seu usuário root não poderá usá-lo. Remover a senha é uma má ideia, porque qualquer pessoa com o arquivo pode usá-la.

ssh-keygen -K

Adicione isto a ~/.ssh/config

UseKeychain yes
bbaassssiiee
fonte