Eu clonei meu repositório git sobre ssh. Portanto, toda vez que eu me comunico com o mestre de origem pressionando ou puxando, preciso redigitar minha senha. Como posso configurar o git para não precisar digitar minha senha várias vezes?
Eu clonei meu repositório git sobre ssh. Portanto, toda vez que eu me comunico com o mestre de origem pressionando ou puxando, preciso redigitar minha senha. Como posso configurar o git para não precisar digitar minha senha várias vezes?
Respostas:
ssh-add
, você precisa ssh-agent
estar executando e mantendo sua chave privada(Ok, respondendo à pergunta atualizada, você primeiro executa ssh-keygen
a geração de uma chave pública e privada, como Jefromi explicou . Você coloca a chave pública no servidor. Você deve usar uma senha, se não tiver o equivalente a uma planilha simples. senha de texto em sua chave privada. Mas, quando o fizer, você precisará, na prática, ssh-agent
conforme explicado abaixo.)
Você deseja executar ssh-agent
em segundo plano enquanto faz login. Depois de fazer login, a idéia é executar ssh-add
uma e apenas uma vez, a fim de fornecer sua senha ao agente e decodificar sua chave. O agente fica na memória com a chave desbloqueada e carregada, pronta para ser usada sempre que você fizer uma busca em algum lugar.
Todos os comandos da família ssh 1 consultarão o agente e poderão usar automaticamente sua chave privada.
Nos sistemas OSX (err, macOS ), GNOME e KDE, ssh-agent
geralmente é iniciado automaticamente para você. Analisarei os detalhes caso, como eu, você também tenha um Cygwin ou outro ambiente Windows, onde isso certamente não seja feito para você.
Comece por aqui: man ssh-agent
.
Existem várias maneiras de executar automaticamente o agente. Como a página de manual explica, você pode executá-lo para que ele seja o pai de todos os outros processos da sua sessão de login. Dessa forma, as variáveis de ambiente que ele fornece estarão automaticamente em todos os seus shells. Quando você (mais tarde) chamar ssh-add
ou ssh
ambos terão acesso ao agente porque todos eles têm as variáveis de ambiente com nomes de caminhos de soquete mágicos ou o que for.
Como alternativa, você pode executar o agente como um filho comum, salvar as configurações do ambiente em um arquivo e originar esse arquivo em todos os shell quando for iniciado.
Meus sistemas OSX e Ubuntu executam automaticamente a instalação do agente, então tudo o que preciso fazer é executar ssh-add
uma vez. Tente executar ssh-add
e veja se funciona, se for o caso, basta fazer isso uma vez por reinicialização.
Meu sistema Cygwin precisava ser feito manualmente, então fiz isso no meu .profile
e tenho .bashrc
fonte .profile
:
. .agent > /dev/null
ps -p $SSH_AGENT_PID | grep ssh-agent > /dev/null || {
ssh-agent > .agent
. .agent > /dev/null
}
O .agent
arquivo é criado automaticamente pelo script; Ele contém as definições e exportações de variáveis de ambiente. O acima tenta originar o arquivo .agent e tenta ps(1)
o agente. Se não funcionar, inicia um agente e cria um novo arquivo de agente. Você também pode simplesmente executar ssh-add
e, se falhar, iniciar um agente.
sudo
com a extensão pam certa.
ssh-agent
é provavelmente mais limpa ao uso:eval `ssh-agent`
Tive um problema semelhante com o GitHub porque estava usando o protocolo HTTPS. Para verificar qual protocolo você está usando, basta executar
git config -l
e olhe para a linha que começa com remote.origin.url
. Para mudar seu protocolo
git config remote.origin.url git@github.com:your_username/your_project.git
Permission denied
erro.
git remote set-url origin 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, use ssh-keygen
(com uma senha em branco) para criar um par de chaves. Em seguida, copie a chave pública para o destino remoto com ssh-copy-id
. A menos que você precise de várias chaves (por exemplo, uma mais segura com uma senha para outros fins) ou se você tem coisas muito estranhas de identidade múltipla, isso é 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 frases secretas, precisará usá ssh-add <key-file>
-las para adicioná-las ssh-agent
(e obviamente iniciar uma ssh-agent
se sua distribuição ainda não tiver uma em execução).
ssh-agent
pois ele deseja ignorar o problema de inserir a senha sempre. Não downvoting mas eu acho que você precisa para melhorar esta resposta, a menos que eu sou o único que mal entendido ...
ssh-agent
. +1 para você!
ssh-*
chama a senha necessária para usar a chave - onde você realmente quis dizer sua senha de usuário real no controle remoto?
Se você clonou usando HTTPS (recomendado), então: -
git config --global credential.helper cache
e depois
git config --global credential.helper 'cache --timeout=2592000'
timeout = 2592000 (30 dias em segundos) para ativar o cache por 30 dias (ou o que for necessário).
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 credenciais.
Para obter mais informações: - Armazenando em cache sua senha do GitHub no Git
Nota : Você precisa do Git 1.7.10 ou mais recente para usar o auxiliar de credencial. Na reinicialização do sistema, talvez seja necessário inserir a senha novamente.
Estendendo os pensamentos de Muein para aqueles que preferem editar arquivos diretamente sobre a execução de comandos no git-bash ou no terminal.
Vá para o diretório .git do seu projeto (raiz do projeto na sua máquina local) e abra o arquivo 'config'. Em seguida, procure por [origem "remota"] 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 com diferentes métodos, dependendo da configuração do sshd).
Você pode evitar colocar essa senha usando certificados. Com os certificados, você ainda precisa inserir uma senha, mas desta vez é a senha da sua chave privada (independente da senha da conta).
Para fazer isso, você pode seguir as instruções indicadas por steveth45:
Se você quiser evitar colocar a senha do certificado todas as vezes, poderá usar o ssh-agent, como apontado pelo DigitalRoss
A maneira exata de fazer isso depende do Unix e do Windows, mas essencialmente você precisa executar o ssh-agent em segundo plano ao fazer login e, na primeira vez em que fizer login, execute o ssh-add para fornecer sua senha ao agente. Todos os comandos da família ssh consultarão o agente e escolherão automaticamente sua senha.
Comece aqui: man ssh-agent.
O único problema do ssh-agent é que, pelo menos no * nix, você deve colocar a senha dos certificados em cada novo shell. E o certificado é "carregado" e você pode usá-lo para se autenticar em um servidor ssh sem colocar nenhum tipo de senha. Mas isso é nesse shell em particular.
Com o chaveiro, você pode fazer o mesmo 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 o seu PC.
O Gnome tem um aplicativo semelhante, chamado Gnome Keyring, que solicita a senha do seu certificado na primeira vez em que você o utiliza e, em seguida, armazena-o com segurança para que você não seja solicitado novamente.
AddKeysToAgent yes
em .ssh / config. Em seguida, ele é carregado na memória até você desligar o computador
Se você estiver usando o github, eles têm um tutorial muito bom que explica mais claramente (pelo menos para mim).
ssh-keygen -t rsa
Quando for solicitada uma senha, deixe em branco, ou seja, pressione enter. tão simples como isso!!
Tente isso na caixa da qual você está empurrando
ssh git@github.com
Você deve receber uma resposta bem-vinda do github e será bom empurrá-lo.
Hi gkucmierz! You've successfully authenticated, but GitHub does not provide shell access.
Mas de alguma forma ainda git me pedir a senha quando eu tentar empurrar
Eu tive que clonar um repositório git de um servidor que não permitia o login vie ssh key, mas apenas com um usuário / senha. Não encontrei nenhuma maneira de configurar o plug-in Git para usar uma combinação simples de usuário / senha, então adicionei o seguinte comando shell como etapa de pré-construção em uma máquina de compilação linux que depende da ferramenta esperada (apt-get install expect):
ESTE NÃO É UM BOM MODO DE RESOLVER ESTE PROBLEMA, COMO SUA SENHA É APRESENTADA COMO TEXTO CLARO NA CONFIGURAÇÃO E NO LOGS DO TRABALHO DE JENKINS! USE-O SOMENTE SE NÃO EXISTE MANEIRA DE 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 / config. É claro que o ssh-agent deve estar executando antecipadamente. Se não estiver em execução (verifique porprep ssh-agent
), basta executá-loeval $(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 é /ubuntu/362280/enter-ssh-passphrase-once/853578#853578
Eu estou tentando evitar digitar a senha o tempo todo também porque estou usando o ssh no windows. O que fiz foi modificar meu arquivo .profile, para inserir minha senha em uma sessão específica. Portanto, este é o trecho 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 eu digito minha senha uma vez em uma sessão ..
Tentei todas essas sugestões e muito mais, apenas para poder clonar minha instância da AWS. Nada funcionou. Finalmente saí do desespero: copiei o conteúdo do id_rsa.pub na minha máquina local e o anexei a ~ / .ssh / known_hosts na minha instância da AWS.