Como fazer com que o git não solicite a senha para a chave ssh no Windows?

43

Estou usando o git bash e configuro a chave ssh usando o ssh-keygen e cada vez que faço algo com um repo git, solicite uma senha para /c/Users/jankiewj/.ssh/id_rsa. Existe uma maneira de desativar essa senha.

jcubic
fonte
Esta página no serverfault pode ajudar serverfault.com/questions/194567/…
@Radoo não ajudou.
jcubic

Respostas:

56

Você pode executar isso no git bash:

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa

ele solicitará a frase secreta no segundo comando, e é isso. Cada ação adicional que você precisará executar (que exigia uma frase secreta) não solicitará a frase secreta (veja um exemplo na captura de tela abaixo):

adicionando frase secreta no git bash no Windows

jcubic
fonte
7
Preciso inseri-lo novamente, assim que fechar o git bash ... existe uma solução permanente?
Preto
@Black é por sessão do bash, coloquei isso .bashrcpara que, toda vez que abro o git bash, recebo o prompt e, para essa sessão, esteja tudo pronto.
jcubic
O que exatamente você coloca no .bashrc? E onde está o .bashrc?
Preto
Edit: nevermind, você tem que criar o arquivo yourselv e ~/.bashrcentão inserir as linhas do seu post nele e salvar, é isso :) thx!
Preto
Em vez de usar as linhas acima, especialmente no .bashrc, eu usaria um script e o colocaria no .bash_profileou .profile. Aqui está um trecho da parte principal do meu .bash_profile, ele deve resolver isso para quem ainda procura uma resposta; é semelhante a uma resposta abaixo. Na parte superior do script, carrego o meu .bashrc, que, se não for aplicável, deixará de fora. Nota: você precisará alterar as referências para o id_rsaque você nomeou sua chave SSH privada e talvez o caminho.
Rockin4Life33
9

Uma solução um pouco melhor e permanente é iniciar automaticamente o ssh-agent ao abrir o git bash no Windows. Você pode copiar / colar o abaixo em seu .profile ou .bashrc. Eu prefiro colocá-lo no .profile

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

Esta solução foi retirada deste artigo de ajuda do github

velval
fonte
Eu coloquei meu código simples .bashrc, como sua solução é diferente? No Windows bash, cada shell é independente, portanto, o agente nunca está em execução quando você executa o shell.
jcubic 5/04
Solução funciona bem, colocando o código no .bashrc. Solicitando a senha ssh apenas na primeira vez. Safed minha vida. Obrigado.
Ben Asmussen
obrigado, isso está salvando minha vida.
gumuruh 13/07
Essa deve ser realmente a resposta aceita, pois apresenta uma solução persistente e que atende melhor ao que eu acho que o OP estava pedindo.
Richard D
O que faço se digitar acidentalmente a senha errada na inicialização? Editar: Com base em superuser.com/a/271673/647110 , você pode ssh-add -Dexcluir todas as chaves.
Nils Guillermin
1

Não tenho certeza se quero recomendá-lo, mas quando você cria a chave e pede para definir a senha, basta pressionar Enter e pular a senha.

Dê uma olhada neste link para saber como usar ssh-keygen: https://help.github.com/articles/working-with-ssh-key-passphrases/

Talvez ssh-agentpossa ajudá-lo de alguma forma. Mas não tenho certeza sem conhecer seu sistema atual.

David Bern
fonte
4
definitivamente não é uma boa resposta
Kennet Celeste
Era a única maneira de resolvê-lo no Windows 10. Depois de seguir todas as etapas do guia do github "Gerando uma nova chave SSH e adicionando-a ao ssh-agent", ele sempre estava me pedindo a senha. Mesmo depois de adicionado. Esse comportamento estava interrompendo meu fluxo de implantação, porque, na mvn release:performfase, ele tenta fazer check-out da tag de lançamento sem fornecer a senha. Portanto, apenas limpar a senha resolveu esse problema.
Fernando Miguel Carvalho
-3

Digite este comando git no seu local de repositório " ssh-keygen -p ". Isso solicitará que você insira o local do arquivo de chaves, a senha antiga e a nova senha (que pode ser deixada em branco para não ter senha). Não insira nada na nova senha e ela removerá a senha

bharti
fonte
1
Deixar uma senha em branco é inseguro e muitos desenvolvedores corporativos não poderão ter uma senha em branco devido a restrições. É uma solução alternativa esfarrapada, não uma solução para o problema do OP.
cbaldan
coxo, talvez, mas apenas para uso local, saboroso e expedito ™
Jim P