Como salvar nome de usuário e senha no git [GitExtension]?

1242

Eu quero usar um push e pull automaticamente no GitExtension , sem inserir meu usuário e senha em um prompt, todas as vezes.

Então, como posso salvar minhas credenciais no git?

Edson Cezar
fonte
1
Você também pode autenticar via SSH: stackoverflow.com/questions/6565357/...
Anton Tarasenko
1
@AntonTarasenko meu gitconfig não diz nada sobre Proxy, apenas [usuário] email = [email protected] nome = uname [credencial] helper = store
gc7__

Respostas:

2210

Corre

git config --global credential.helper store

então

git pull

forneça um nome de usuário e senha e esses detalhes serão lembrados mais tarde. As credenciais são armazenadas em um arquivo no disco, com as permissões de disco "apenas legíveis / graváveis ​​pelo usuário", mas ainda em texto sem formatação.

Se você quiser alterar a senha mais tarde

git pull

Falhará, porque a senha está incorreta, o git remove o usuário + senha ofensivo do ~/.git-credentialsarquivo, agora execute novamente

git pull

para fornecer uma nova senha para que funcione como antes.

Neetika
fonte
6
como o sinalizador -u é importante para alterar a senha posteriormente?
Lucidbrot # 25/17
8
para Debian / Ubuntu usar libsecret stackoverflow.com/questions/36585496/...
rofrol
3
@lucidbrot desculpe por responder tarde. O git pull -u não funciona com a versão mais recente. Eu atualizei a resposta. Espero que ele responda sua pergunta.
Neetika 13/11
51
Observe que isso armazenará seu nome de usuário e senha em um arquivo de texto sem formatação em ~ / .git-credentials. Qualquer um pode abrir e ler.
RoboAlex 24/09
12
Isso não funciona. Falha ao puxar.
Urasquirrel 4/10/18
350

Você pode usar o git configpara habilitar o armazenamento de credenciais no git.

git config --global credential.helper store

Ao executar esse comando, na primeira vez em que você extrai ou envia do repositório remoto, você será perguntado sobre o nome de usuário e a senha.

Posteriormente, para comunicações subsequentes com o repositório remoto, você não precisará fornecer o nome de usuário e a senha.

O formato de armazenamento é um .git-credentialsarquivo armazenado em texto sem formatação.

Além disso, você pode usar outros auxiliares para o git config credential.helpercache de memória, a saber:

git config credential.helper cache <timeout>

que leva um opcional timeout parameter, determinando por quanto tempo as credenciais serão mantidas na memória. Usando o auxiliar, as credenciais nunca tocarão no disco e serão apagadas após o tempo limite especificado. O defaultvalor é900 seconds (15 minutes).


AVISO : Se você usar esse método, as senhas da sua conta git serão salvas no plaintextformato, no global .gitconfig file, por exemplo, no linux, será/home/[username]/.gitconfig

Se isso for indesejável para você, use um ssh keypara suas contas.

Farhad Faghihi
fonte
3
Desejamos-lhe mostrou o arquivo .gitconfig - o primeiro comando foi substituído pelo segundo :(
Adam
3
Pois git config credential.helper cacheas senhas não serão salvas em um arquivo, apenas armazenadas na memória. Veja: git-scm.com/docs/git-credential-cache
SA
1
Não funciona. Dá fatal: a autenticação falhou. Nem pede senha.
Philip Rego
2
Assim como um adendo - sua chave ssh privada também será armazenada em texto sem formatação em um local acessível ao usuário, portanto, essencialmente, a mesma superfície de ataque nos dois casos.
Falco
como posso usar isso para o gitlab
anil
171

Método recomendado e seguro: SSH

Crie uma chave ssh Github. Vá para github.com -> Configurações -> Chaves SSH e GPG -> Nova chave SSH. Agora salve sua chave privada no seu computador.

Então, se a chave privada é salva como id_rsa no diretório ~ / .ssh / , nós a adicionamos para autenticação, da seguinte forma:

ssh-add -K ~/.ssh/id_rsa


Um método mais seguro: armazenamento em cache

Podemos usar git-credential-store para armazenar em cache nosso nome de usuário e senha por um período de tempo. Basta digitar o seguinte na sua CLI (terminal ou prompt de comando):

git config --global credential.helper cache

Você também pode definir o período de tempo limite (em segundos) da seguinte maneira:

git config --global credential.helper 'cache --timeout=3600'


Um método ainda menos seguro

O Git-credential-store também pode ser usado, mas salva as senhas no arquivo de texto sem formatação no seu disco, como tal:

git config credential.helper store


Resposta desatualizada - rápida e insegura

Isto é um método inseguro de armazenar sua senha em texto sem formatação. Se alguém ganhar o controle do seu computador, sua senha será exposta!

Você pode definir seu nome de usuário e senha assim:

git config --global user.name "your username"

git config --global user.password "your password"
Andreas Bigger
fonte
16
Isto não funcionou para mim, clone git ainda pede o nome de usuário e senha
Oliver
11
eu não recomendo armazenando a sua senha como esta, porque "git configuração --global -l" iria revelar sua senha no console
CCC
1
Isso não está funcionando para mim. É estranho que ele deve funcionar para qualquer um, uma vez que na especificação do gitconfig não há espaço para "password"
Hamish Todd
.gitconfig é o arquivo diferente: .git-credentials localizado na sua pasta pessoal contém URL para repomar com seu nome de usuário e senha no URL, assim como git: // nome do usuário: senha @ server / git / repo Tenha cuidado, É SALVAR INCLUÍDO SENHA DO TEXTO. Use "git config --global credential.helper cache" se você não puder usar as chaves ssh.
skabbit 13/04
Quando tentei adicionar usuário e senha manualmente, o arquivo de configuração quebrou e tive que clonar o repositório novamente. Não tente isso ..
Letie Techera
102

Ligue o auxiliar de credenciais para que o Git salve sua senha na memória por algum tempo:

No Terminal, digite o seguinte:

# Set git to use the credential memory cache
git config --global credential.helper cache

Por padrão, o Git armazenará sua senha em cache por 15 minutos.

Para alterar o tempo limite padrão do cache de senha, digite o seguinte:

# Set the cache to timeout after 1 hour (setting is in seconds)
git config --global credential.helper 'cache --timeout=3600'

Da Ajuda do GitHub

simhumileco
fonte
7
você é o único que sugeriu a versão global que é importante, porque ele ficou arruinado para mim cada vez que eu re-clonado o repo
Xerus
4
Como definir o tempo limite para o infinito? Eu nunca quero inserir minha senha novamente.
Avamander
8
@Avamander apenas substitua a cachepeça por store. Assim, o comando completo será: git config --global credential.helper store. Observe que isso armazenará sua senha em um arquivo de texto aberto (sem criptografia, por assim dizer).
Aleksandar
2
@ Casper Isso não funciona com mais de uma conta, a senha não é buscada na loja com base no email como deveria, em vez disso, a primeira na lista é obtida.
Avamander
2
@ Aravamand hm .. isso é suposto ser assim ou pode ser um bug? Qual é o valor máximo para o --timeoutparâmetro?
Aleksandar
50

Você pode editar o ~/.gitconfigarquivo para armazenar suas credenciais

sudo nano ~/.gitconfig

Que já deveria ter

[user]
        email = [email protected]
        user = gitUSER

Você deve adicionar na parte inferior deste arquivo.

[credential]
        helper = store

O motivo pelo qual recomendo esta opção é porque ela é global e, a qualquer momento, você precisa remover a opção e sabe para onde ir e alterá-la.

USE SOMENTE ESTA OPÇÃO NO SEU COMPUTADOR PESSOAL.

Então quando você puxa | clone | digite sua senha git, em geral, a senha será salva no ~/.git-credentialsformato

https://GITUSER:[email protected]

ONDE DOMAIN.XXX PODERIA SER GITHUB.COM | BITBUCKET.ORG DE OUTROS

Ver documentos

Reinicie seu terminal.

T04435
fonte
1
Não se esqueça de reiniciar a janela do git bash. Somente quando eu fiz isso, funcionou para mim.
precisa saber é o seguinte
33

Basta colocar suas credenciais no URL assim:

https://Username: Password@github.com/myRepoDir/myRepo.git

Você pode armazená- lo assim:

git remote add myrepo https://Userna...

... exemplo para usá- lo:

git push myrepo master


Agora, é necessário listar os aliases de URL:

git remote -v

... e que o comando para excluir um deles:

git remote rm myrepo

Nadu
fonte
8
Você também pode deixar sua senha fora do URL para que o Git peça sua senha, mas não seu nome de usuário.
Canguru
É muito fácil e seguro usar o SSH em vez do HTTP. Portanto, você pode manter sua senha do Git em segredo e usar apenas sua chave SSH. Informações sobre SSH no Git: help.github.com/en/enterprise/2.16/user/… [email protected]:Username/myRepo.git
sexta
Ter sua senha no URL salvará no histórico do seu terminal, dessa forma não é muito seguro.
Josh Correia
Observe que atualmente um Wiki só pode ser clonado https, não ssh, então uma solução como essa pode ser útil lá. Observe também que você pode usar um token oauth, que é marginalmente mais seguro que sua senha do GitHub.
AstroFloyd
31

Para configuração global, abra o terminal (de qualquer lugar) execute o seguinte:

  git config --global user.name "your username"
  git config --global user.password "your password"

Por isso, qualquer repositório Git local que você tenha em sua máquina usará essas informações.

Você pode configurar individualmente para cada repositório fazendo:

  • abra o terminal na pasta de recompra.
  • execute o seguinte:

    git config user.name "your username"
    git config user.password "your password"
    

Afeta apenas essa pasta (porque sua configuração é local).

Tuananhcwrs
fonte
8
Não é perigoso ter essas credenciais em um arquivo de configuração simples que possa ser visto por alguém?
Bool3max # 5/19
1
sua pergunta deve ser para outro tópico. Aqui discutimos sobre como configurar o nome e a senha do git global e localmente.
Tuananhcwrs
Obrigado pelo amigo de entrada
bool3max
11
Gostaria de acrescentar que perguntar sobre possíveis problemas de segurança de uma resposta tem um lugar aqui, pois influencia diretamente sua qualidade e potencialmente milhares de usuários que a implementam.
Michael Kargl
2
não funciona para mim, acrescentou --localtag mas novamente nada acontece
PayamBeirami
23

Você pode usar o git-credential-store para armazenar suas senhas não criptografadas no disco, protegidas apenas pelas permissões do sistema de arquivos.

Exemplo

$ git config credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

[several days later]
$ git push http://example.com/repo.git
[your credentials are used automatically]

Você pode verificar as credenciais armazenadas no arquivo ~/.git-credentials

Para mais informações, visite git-credential-store - Auxiliar para armazenar credenciais em disco

David Navarro Astudillo
fonte
17

Você estará mais seguro se usar a autenticação SSH do que a autenticação de nome de usuário / senha.

Se você estiver usando um Mac, a autenticação do cliente SSH será integrada ao chaveiro do MacOS. Depois de criar uma chave SSH, digite no seu terminal:

ssh-add -K ~/.ssh/id_rsa

Isso adicionará a chave privada SSH ao chaveiro do MacOS. O cliente git usará ssh quando se conectar ao servidor remoto. Contanto que você tenha registrado sua chave pública ssh no servidor, você ficará bem.

Birol Efe
fonte
1
deve ser k não K?
Dez93_2000 28/04
1
FYI: Estou trabalhando em um Mac. Dito isto, na informação "man": "-k" Ao carregar ou excluir chaves do agente, processe apenas chaves privadas simples e ignore os certificados. "-K" Ao adicionar identidades, cada frase secreta também será armazenada no chaveiro do usuário. Ao remover identidades com -d, cada senha será removida.
quer
3
Eu não acho que isso funcione para repositórios baseados em https.
Zakmck 19/05/19
5
Esta resposta parece confundir senhas (repositórios HTTPS) com chaves privadas SSH.
Steve Bennett
2
Discordo. Você não pode estar mais seguro ao conceder acesso ao host SSH. Usando a autenticação HTTP, alguém que roubar as credenciais teria acesso apenas GitHub/GitLab. Os tokens também são projetados para ter uma vida útil limitada.
Dimitri Kopriwa
16

Depois de revisar dezenas de posts, blogs, etc., experimentei todos os métodos, e foi isso que eu criei. Abrange tudo.

Folha de truques sobre as credenciais e os pacotes privados do DevOps Git do Vanilla

Essas são todas as formas e ferramentas pelas quais você pode autenticar com segurança o git para clonar um repositório sem um prompt de senha interativo .

  • Chaves públicas SSH
    • SSH_ASKPASS
  • Tokens de acesso à API
    • GIT_ASKPASS
    • .gitconfig
    • .gitconfig [credencial]
    • .git-credentials
    • .netrc
  • Pacotes particulares (grátis)
    • nó / npm package.json
    • python / pip / eggs requirements.txt
    • gemas de rubi Gemfile
    • golang go.mod

A bala de prata

Quer o Just Works ™? Esta é a bala mágica de prata.

Obtenha seu token de acesso (consulte a seção na tabela de dicas, se você precisar das instruções do Github ou Gitea para isso) e defina-o em uma variável de ambiente (tanto para desenvolvimento local quanto para implantação):

MY_GIT_TOKEN=xxxxxxxxxxxxxxxx

Para o Github, copie e execute estas linhas literalmente :

git config --global url."https://api:[email protected]/".insteadOf "https://github.com/"
git config --global url."https://ssh:[email protected]/".insteadOf "ssh://[email protected]/"
git config --global url."https://git:[email protected]/".insteadOf "[email protected]:"

Parabéns, agora qualquer repositório automatizado de clonagem de ferramentas git não será obstruído por um prompt de senha, seja usando https ou qualquer estilo de ssh url.

Não está usando o Github?

Para outras plataformas (Gitea, Github, Bitbucket), basta alterar o URL. Não altere os nomes de usuário (embora arbitrários, eles são necessários para entradas de configuração distintas).

Compatibilidade

Funciona localmente no MacOS, Linux, Windows (no Bash), Docker, CircleCI, Heroku, Akkeris, etc.

Mais informações

Veja a seção ".gitconfig em vez de" da cheatsheet.

Segurança

Veja a seção "Segurança" do cheatsheet.

CoolAJ86
fonte
2
Este é um salva-vidas. Obrigado.
annaoomph 17/01
2
O que eu procurava era git config --global credential."https://somegithost.com".username MyUserName, que está na sua planilha de dicas, mas não em nenhum outro lugar do tópico de resposta. Essa solução em particular não responde à pergunta do OP, mas respondeu à minha, então obrigado!
TheDudeAbides
1
Isso é maravilhoso !!! Melhor resposta, muito obrigado.
Parsa
12

Nesse caso, você precisa do ajudante de credenciais do git para informar ao git para lembrar sua senha e nome de usuário do GitHub usando a seguinte linha de comando:

git config --global credential.helper wincred 

e se você estiver usando o repo usando a chave SSH, precisará da chave SSH para autenticar.

shaw
fonte
11

Nenhuma das respostas acima funcionou para mim. Eu continuava recebendo o seguinte toda vez que queria fetchou pull:

Enter passphrase for key '/Users/myusername/.ssh/id_rsa':


Para Macs

Consegui impedi-lo de perguntar minha senha:

  1. Abra a configuração executando: vi ~/.ssh/config
  2. Adicionado o seguinte: UseKeychain yes
  3. Salvo e encerrado: pressione Esc e digite:wq!

Para Windows

Consegui fazê-lo funcionar usando as informações nesta stackexchange: https://unix.stackexchange.com/a/12201/348665

Gene Parcellano
fonte
isso é porque você está usando o protocolo SSH (outras respostas usam HTTPS).
Mariusm
6

Além de editar o ~/.gitconfigarquivo, você pode fazer isso se perguntar:

git config --local --edit

ou

git config --global --edit

Nota para sempre usar aspas simples :

git config --local user.name 'your username'
git config --local user.password 'your password'

ou

git config --global user.name 'your username'
git config --global user.password 'your password'

Seu nome de usuário e senha podem usar alguns caracteres que quebrariam sua senha se você usar aspas duplas.

--localou --globalsignifica que os parâmetros de configuração são salvos para o projeto ou para o usuário do sistema operacional.

prosti
fonte
Verifique também este um que explica ainda mais.
Prosti
6

Apenas use

git config --global credential.helper store

e faça o git pull , ele pedirá nome de usuário e senha; a partir de agora não fornecerá nenhum prompt para nome de usuário e senha; ele armazenará os detalhes

Srikanth Josyula
fonte
4
Você basicamente repetiu a resposta aceita .
jsamol
4

Armazenar nome de usuário e senha em .git-credentials

.git-credentialsé onde seu nome de usuário e senha (token de acesso) são armazenados quando você executa git config --global credential.helper store, o que outras respostas sugerem e, em seguida, digite seu nome de usuário e senha ou token de acesso:

https://${username_or_access_token}:${password_or_access_token}@github.com

Portanto, para salvar o nome de usuário e a senha (token de acesso):

git config —-global credential.helper store
echo “https://${username}:${password_or_access_token}@github.com“ > ~/.git-credentials

Isso é muito útil para o robô github, por exemplo, para resolver builds automatizados em cadeia no mesmo repositório de docker , tendo regras para ramificação diferente e, em seguida, acioná-lo pressionando-opost_push prostituta no hub da janela de encaixe.

Um exemplo disso pode ser visto aqui no stackoverflow.

JiaHao Xu
fonte
Obrigado, você é um salvador de vida! Também pode definir https: // $ {access_token}: $ {access_token} @ github.com
Lucas Mendes Mota Da Fonseca
1
O token de acesso @LucasMendesMotaDaFonseca pode ser usado como nome de usuário ???
JiaHao Xu 24/11/19
3

Uma maneira rápida de armazenar em cache credenciais git:

git config credential.helper 'cache' --timeout=10800

agradável e seguro

o tempo limite é em segundos.

Amin Shojaei
fonte
2

Depois de ler o tópico na íntegra e experimentar a maioria das respostas a essa pergunta, finalmente encontrei o procedimento que funciona para mim. Quero compartilhá-lo caso alguém tenha que lidar com um caso de uso complexo, mas ainda não queira passar pelo thread completo e pelas páginas de manual gitcredentials , gitcredentials-store etc., como eu fiz.

Veja abaixo o procedimento sugiro SE você (como eu) tem que lidar com vários repositórios de vários fornecedores (gitlab, GitHub, bitbucket, etc.), utilizando várias combinações de usuário / senha diferentes. Se você em vez disso ter apenas uma única conta para trabalhar, então você pode ser melhor empregar os git config --global credential.helper storeou git config --global user.name "your username"etc. soluções que têm sido muito bem explicado nas respostas anteriores.

Minha solução:

  1. auxiliar de credenciais globais não definido, caso alguma experiência anterior atrapalhe :)

> git config --global --unset credentials.helper

  1. vá para o diretório raiz do seu repositório e desative o auxiliar de credenciais local (se necessário)

> cd /path/to/my/repo

> git config --unset credential.helper

  1. crie um arquivo para armazenar as credenciais do seu repositório

> git config credential.helper 'store --file ~/.git_repo_credentials'

Nota : este comando cria um novo arquivo chamado ".git_repo_credentials" em seu diretório pessoal, no qual o Git armazena suas credenciais. Se você não especificar um nome de arquivo, o Git usará o padrão ".git_credentials". Nesse caso, basta emitir o seguinte comando:

> git config credential.helper store

  1. defina seu nome de usuário

git config credential.*.username my_user_name

Nota : o uso de "*" geralmente é bom se seus repositórios forem do mesmo provedor (por exemplo, GitLab). Se, em vez disso, seus repositórios são hospedados por provedores diferentes, sugiro definir explicitamente o link para o provedor para cada repositório, como no exemplo a seguir (para GitLab):

git config credential.https://gitlab.com.username my_user_name

Neste ponto, se você emitir um comando exigindo suas credenciais (por exemplo git pull), será solicitada a senha correspondente a "my_user_name". Isso é necessário apenas uma vez porque o git armazena as credenciais em ".git_repo_credentials" e usa automaticamente os mesmos dados nos acessos subseqüentes.

Sal Borrelli
fonte
2

No comentário de rifrol, no Linux Ubuntu, a partir desta resposta , veja como no Ubuntu:

sudo apt-get install libsecret-1-0 libsecret-1-dev
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

Algumas outras distribuições fornecem o binário para que você não precise construí-lo.

No OS X, normalmente ele é "construído" com um módulo padrão de "osxkeychain", para que você o obtenha gratuitamente.

rogerdpack
fonte
2

Verifique a documentação oficial do git:

Se você usa o transporte SSH para conectar-se a controles remotos, é possível ter uma chave sem uma senha, o que permite transferir dados com segurança sem digitar seu nome de usuário e senha. No entanto, isso não é possível com os protocolos HTTP - toda conexão precisa de um nome de usuário e senha. Isso fica ainda mais difícil para sistemas com autenticação de dois fatores, nos quais o token usado para uma senha é gerado aleatoriamente e é impronunciável.

Felizmente, o Git tem um sistema de credenciais que pode ajudar com isso. O Git tem algumas opções fornecidas na caixa:

  • O padrão é não armazenar em cache. Toda conexão solicitará seu nome de usuário e senha.

  • O modo "cache" mantém as credenciais na memória por um determinado período de tempo. Nenhuma das senhas é armazenada no disco e é removida do cache após 15 minutos.

  • O modo "armazenamento" salva as credenciais em um arquivo de texto sem formatação no disco e elas nunca expiram. Isso significa que, até que você altere sua senha do host Git, você nunca precisará digitar suas credenciais novamente. A desvantagem dessa abordagem é que suas senhas são armazenadas em texto não criptografado em um arquivo simples em seu diretório pessoal.

  • Se você estiver usando um Mac, o Git vem com o modo "osxkeychain", que armazena em cache as credenciais no chaveiro seguro anexado à sua conta do sistema. Esse método armazena as credenciais no disco e elas nunca expiram, mas são criptografadas com o mesmo sistema que armazena certificados HTTPS e preenchimentos automáticos do Safari.

  • Se você estiver usando o Windows, poderá instalar um auxiliar chamado "Git Credential Manager para Windows". Isso é semelhante ao auxiliar "osxkeychain" descrito acima, mas usa o Windows Credential Store para controlar informações confidenciais. Pode ser encontrado em https://github.com/Microsoft/Git-Credential-Manager-for-Windows .

Você pode escolher um destes métodos, definindo um valor de configuração do Git:

$ git config --global credential.helper cache

$ git config --global credential.helper store

https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage

Sma Ma
fonte