Configurar o Git através de SSH para fazer o login uma vez
Pergunta
Eu ter clonado o meu repositório git através de ssh.Assim, cada vez que me comunico com a origem mestre empurrando ou puxando, eu precise reinserir a minha senha.Como posso configurar o git para que eu não precise digitar minha senha várias vezes?
Solução
Tente ssh-add
, você precisa ssh-agent
para ser executando e mantendo a sua chave privada
(Ok, de responder à actualização da questão, a primeira execução ssh-keygen
para gerar uma chave pública e privada como Jefromi explicou.Você coloca a chave pública no servidor.Você deve usar uma senha, se você não tiver o equivalente a uma senha de texto simples em sua chave privada.Mas quando o fizer, então você precisa de, por uma questão prática ssh-agent
como explicado abaixo).
Você deseja executar ssh-agent
no plano de fundo enquanto você fizer o login.Depois de fazer o login, a idéia é executar ssh-add
uma vez e apenas uma vez, para dar o agente de sua senha, para descodificar a sua chave.Em seguida, o agente fica apenas na memória com a sua chave desbloqueado e carregado, pronto para usar cada vez que você ssh em algum lugar.
Todos os ssh-família comandos1 serão, de seguida, consulte o agente e, automaticamente, ser capaz de utilizar a sua chave privada.
Em OSX (err, macOS), O GNOME e o KDE, sistemas, ssh-agent
geralmente é iniciado automaticamente para você.Eu vou passar os detalhes do caso, como eu, você também tem um Cygwin ou outro ambiente windows onde este certamente não é feito para você.
Comece por aqui: man ssh-agent
.
Existem várias maneiras para executar automaticamente o agente.A página de manual explica, você pode executá-lo para que ele seja um pai de toda a sua sessão de login de outros processos.Dessa forma, as variáveis de ambiente que fornece automaticamente será em todas as suas conchas.Quando você (mais tarde) invocar ssh-add
ou ssh
ambos terão acesso ao agente, porque todas elas têm as variáveis de ambiente com a magia de soquete caminhos ou o que seja.
Como alternativa, você pode executar o agente como uma criança comum, salvar as configurações de ambiente em um arquivo, e fonte de arquivo em cada shell quando ele é iniciado.
Meu OSX e Ubuntu sistemas de automaticamente fazer o agente de iniciar a instalação, então tudo que eu tenho a fazer é executar ssh-add
de uma só vez.Tente executar ssh-add
e ver se funciona, se é assim, então você só precisa fazer isso uma vez por reiniciar.
Meu Cygwin sistema necessário é feito manualmente, então eu fiz isso no meu .profile
e eu tenho .bashrc
origem .profile
:
. .agent > /dev/null
ps -p $SSH_AGENT_PID | grep ssh-agent > /dev/null || {
ssh-agent > .agent
. .agent > /dev/null
}
O .agent
o arquivo é criado automaticamente pelo script;ele contém as definições de variáveis de ambiente e as exportações.Acima tenta para a fonte .agente de ficheiro e, em seguida, tenta ps(1)
o agente.Se não funcionar, começa um agente e cria um novo arquivo do agente.Você também pode executar ssh-add
e se ele falhar, inicie um agente.
1.E mesmo local e remoto
sudo
com o direito pam extensão.
Outras dicas
Tive um problema semelhante com o Github porque eu estava usando o protocolo HTTPS. Para verificar qual protocolo você está usando apenas correr
git config -l
e olhe para a linha começando com remote.origin.url
. Para mudar seu protocolo
git config remote.origin.url git@github.com:your_username/your_project.git
Trata -se de configurar o SSH, não o Git. Se você ainda não o fez, você deve usar ssh-keygen
(com uma senha em branco) para criar um par de chaves. Em seguida, você copia a chave pública para o destino remoto com ssh-copy-id
. A menos que você precise de várias chaves (por exemplo, mais seguras com uma senha para outros fins) ou você tem algumas coisas realmente estranhas de múltiplas identidades acontecendo, é simples:
ssh-keygen # enter a few times to accept defaults
ssh-copy-id -i ~/.ssh/id_rsa user@host
EDIT: Você realmente deve apenas ler a resposta do Digitalross, mas: se você usar chaves com sessões, precisará usar ssh-add <key-file>
para adicioná -los a ssh-agent
(e obviamente inicia um ssh-agent
Se sua distribuição ainda não tiver uma em execução para você).
Certifique -se de que, ao clonar o repositório, você o fez com o URL SSH e não com os https; Na caixa URL do clone do repo, escolha o protocolo SSH antes de copiar o URL. Veja a imagem abaixo:
Se você clonou usando Https (recomendado) então:-
git config --global credential.helper cache
e depois
git config --global credential.helper 'cache --timeout=2592000'
Tempo limite = 2592000 (30 dias em segundos) para ativar o armazenamento em cache por 30 dias (ou o que você está suítes).
Agora execute um comando git simples que requer seu nome de usuário e senha.
Digite suas credenciais uma vez e agora o cache está ativado por 30 dias.
Tente novamente com qualquer comando git e agora você não precisa de nenhuma credenciais.
Para mais informações :- Armazenando em cache sua senha do github no git
Observação : Você precisa do Git 1.7.10 ou mais recente para usar o ajudante de credenciais. No reinício do sistema, talvez tenhamos que inserir a senha novamente.
Estendendo os pensamentos de Muein para aqueles que preferem editar arquivos diretamente em execução de comandos no Git-Bash ou Terminal.
Vá para o diretório .git do seu projeto (Project Root em sua máquina local) e abra o arquivo 'config'. Em seguida, procure [Remote "Origin"] e defina a configuração da URL da seguinte maneira:
[remote "origin"]
#the address part will be different depending upon the service you're using github, bitbucket, unfuddle etc.
url = git@github.com:<username>/<projectname>.git
Eu acho que há duas coisas diferentes aqui. O primeiro é que a autenticação SSH normal exige que o usuário coloque a senha da conta (onde a senha da conta será autenticada em diferentes métodos, dependendo da configuração do SSHD).
Você pode evitar colocar essa senha usando certificados. Com certificados, você ainda precisa colocar uma senha, mas desta vez é a senha da sua chave privada (que é independente da senha da conta).
Para fazer isso, você pode seguir as instruções apontadas por Steveth45:
Se você deseja evitar colocar a senha do certificado toda vez que pode usar o SSH-Agent, conforme apontado pela Digitalross
A maneira exata da maneira que você faz isso depende do UNIX vs Windows, mas essencialmente você precisa executar o SSH-Agent em segundo plano quando você efetuar login e, na primeira vez em que você faz login, execute o ssh-add para dar ao agente sua senha. Todos os comandos da família SSH consultarão o agente e retomarão automaticamente sua senha.
Comece aqui: homem ssh-agent.
O único problema do ssh-agent é que, pelo menos no *nix, você deve colocar a senha de certificados em cada novo shell. E então o certificado está "carregado" e você pode usá -lo para autenticar contra um servidor SSH sem colocar nenhum tipo de senha. Mas isso está nessa concha específica.
Com chaveiro Você pode fazer a mesma coisa que o SSH-Agent, mas "em todo o sistema". Depois de ligar o computador, você abre um shell e coloca a senha do certificado. E então, todos os outros shell usarão esse certificado "carregado" e sua senha nunca será solicitada novamente até que você reinicie seu PC.
Gnome tem um aplicativo semelhante, chamado Keyring gnomo Isso pede a senha do seu certificado na primeira vez em que você a usa e, em seguida, a armazena com segurança para que você não seja solicitado novamente.
Se você está usando o Github, eles têm um tutorial muito bom que explica mais claramente (pelo menos para mim).
ssh-keygen -t rsa
Quando solicitado uma senha, deixe -a em branco, ou seja, pressione Enter. tão simples como isso!!
Experimente isso da caixa de onde você está empurrando
ssh git@github.com
Você deve obter uma resposta bem -vinda do Github e ficará bem em depois pressionar.
Eu tive que clonar um repositório Git de um servidor que não permitia a tecla Login Vie SSH, mas apenas com um usuário/senha. Não encontrei como configurar o plug-in Git para usar uma combinação simples de usuário/senha, então adicionei o seguinte comando Shell como etapa pré-construção em uma máquina de construção Linux, que depende da ferramenta esperar (instalação apt-get espera):
Esta não é uma boa maneira de resolver esse problema, pois sua senha é mostrada como texto claro na configuração e logs do trabalho Jenkins! Use-o apenas se não houver como configurar a autentificação RSA-Key ou outras possibilidades de configuração!
rm -rf $WORKSPACE &&
expect -c 'set timeout -1; spawn git clone USER@MYHOST:/MYPATH/MYREPO.git $WORKSPACE; expect "password:" {send "MYPASSWORD\r"}; expect eof'
Adicione uma única linha AddKeysToAgent yes
na parte superior do arquivo .ssh/configuração. Claro que o ssh-agent deve estar funcionando com antecedência. Se não estiver funcionando (verifique por prep ssh-agent
), então basta executá -lo eval $(ssh-agent)
Agora, a chave é carregada em todo o sistema na memória e você não precisa digitar a senha novamente.
A fonte da solução é https://askubuntu.com/questions/362280/enter-ssh-psphrase-onnce/853578#853578
Estou tentando evitar digitar a senha o tempo todo, porque estou usando o SSH no Windows. O que fiz foi modificar meu arquivo .profile, para que eu digite minha senha em uma sessão específica. Portanto, este é o pedaço de código:
SSH_ENV="$HOME/.ssh/environment"
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV"
echo succeeded
chmod 600 "$SSH_ENV"
. "$SSH_ENV" > /dev/null
ssh-add
}
# test for identities
function test_identities {
# test whether standard identities have been added to the agent already
ssh-add -l | grep "The agent has no identities" > /dev/null
if [ $? -eq 0 ]; then
ssh-add
# $SSH_AUTH_SOCK broken so we start a new proper agent
if [ $? -eq 2 ];then
start_agent
fi
fi
}
# check for running ssh-agent with proper $SSH_AGENT_PID
if [ -n "$SSH_AGENT_PID" ]; then
ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
fi
# if $SSH_AGENT_PID is not properly set, we might be able to load one from
# $SSH_ENV
else
if [ -f "$SSH_ENV" ]; then
. "$SSH_ENV" > /dev/null
fi
ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
else
start_agent
fi
fi
Então, com isso, digito minha senha uma vez em uma sessão.
Eu tentei todas essas sugestões e muito mais, apenas para poder dar um clone da minha instância da AWS. Nada funcionou. Finalmente trapaceei o desespero: copiei o conteúdo de id_rsa.pub na minha máquina local e a anexei a ~/.ssh/conhecida_hosts na minha instância da AWS.