Como fazer com que o git não solicite a senha da chave ssh?

Como fazer com que o git não solicite a senha da chave ssh?

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

EDITAR: Eu editei o título original (removi o Windows) desde que acabei de usar a nova instalação do Ubuntu no meu laptop de trabalho e quando a chave ssh tem uma senha, ele sempre pede e a solução para corrigir isso é a mesma. Provavelmente funciona da mesma forma no MacOSX que também é Unix e usa as mesmas ferramentas básicas.

Responder1

Você pode executar isso no git bash, Windows WLS ou bash no GNU/Linux real.

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

ele solicitará a senha no segundo comando e pronto. Cada ação adicional que você precisará realizar (que antes 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

Responder2

Um pouco melhor esolução permanenteé iniciar automaticamente o agente ssh ao abrir o git bash no Windows. Você pode copiar/colar o texto abaixo em seu .profile ou .bashrc. prefiro colocar no.perfil

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 tomadadeste artigo de ajuda do github

Responder3

TDLR: Para usuários do Windows,

  • correrssh-add "C:\\Users\\<your user>/.ssh/id_rsa"
  • nãossh-add ~/.ssh/id_rsa

Por exemplo, vejo isso o tempo todo:

$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /c/Users/User/.ssh/id_rsa: 
Identity added: /c/Users/User/.ssh/id_rsa (/c/Users/User/.ssh/id_rsa)

$ git pull
Enter passphrase for key 'C:\Users\User/.ssh/id_rsa': 

Observe os separadores de caminho inconsistentes: o agente ssh converte ~ usando separadores de caminho Unix, mas o git usa separadores de caminho do Windows. Dado que o caminho do id_rsaarquivo é usado como chave, isso explica porque o cache foi perdido.

  • Outra diferença é que C:/em vez de/c/
  • Observação relacionada: Quando o git solicitar a senha, ela não será armazenada em cache, portanto você poderá inseri-la lá indefinidamente. Tente passar a frase para ssh-addonly.
  • No Windows, suponha que ~seja "multivalorado", por isso é melhor ser explícito.
  • ssh-addanalisa locais padrão como ~/.ssh/id_rsa. No Windows, suponha que isso seja ambíguo. Passe explicitamente o caminho formatado explicitamente em vez de confiar nos caminhos padrão:
    • ssh-add "C:\\Users\\<your user>/.ssh/id_rsa", ou seja, na resposta do @velval também.

Responder4

Chaveiroé um programa para fazer esse trabalho de forma inteligente.

Ele deve ser executado a partir do .bashrc (ou equivalente) e configurará o ambiente corretamente, sem nenhuma configuração além das chaves que deve carregar.

Isto é o que eu uso:keychain --quiet key1.pem key2.pem

Ele percebe que o shell é Zsh e funcionou exatamente da mesma forma quando usei o Bash.

informação relacionada