Recentemente, mudei para sincronizar meus repositórios para https: // no GitHub (devido a problemas de firewall), e ele solicita uma senha sempre.
Existe uma maneira de armazenar em cache as credenciais, em vez de autenticar sempre que isso git push
?
git
authentication
github
git-push
git-config
Zepplock
fonte
fonte
_netrc
arquivo que contém suas credenciais. Veja minha resposta abaixo . Achei mais seguro que ogit-credential-winstore.exe
(cache de memória), que é um pouco problemático no Windows.git-credential-winstore
funcionou melhor para o Windows. O que há de buggy? Configurar o ssh é a opção preferida, embora eu tenha feito isso várias vezes, é muito mais suscetível a erros e, às vezes, simplesmente não funciona quando você precisa se conectar a vários hosts.Respostas:
Com o Git versão 1.7.9 e posterior
Desde o Git 1.7.9 (lançado no final de janeiro de 2012), existe um mecanismo puro no Git para evitar a necessidade de digitar sua senha o tempo todo para HTTP / HTTPS, chamados auxiliares de credenciais . (Graças a dazonic por apontar esse novo recurso nos comentários abaixo.)
Com o Git 1.7.9 ou posterior, você pode usar apenas um dos seguintes auxiliares de credenciais:
... que diz ao Git para manter sua senha em cache na memória por (por padrão) 15 minutos. Você pode definir um tempo limite mais longo com:
(Esse exemplo foi sugerido na página de ajuda do GitHub para Linux .) Você também pode armazenar suas credenciais permanentemente, se assim desejar, veja as outras respostas abaixo.
A ajuda do GitHub também sugere que, se você estiver no Mac OS X e usou o Homebrew para instalar o Git, poderá usar o keystore nativo do Mac OS X com:
Para o Windows, existe um auxiliar chamado Git Credential Manager para Windows ou wincred no msysgit .
Com o Git for Windows 2.7.3+ (março de 2016):
Para Linux, você pode usar
gnome-keyring
(ou outra implementação de chaveiro, como o KWallet).Com versões Git anteriores à 1.7.9
Nas versões do Git anteriores à 1.7.9, essa opção mais segura não está disponível e você precisará alterar o URL que o seu
origin
controle remoto usa para incluir a senha dessa maneira:... em outras palavras,
:password
após o nome de usuário e antes do@
.Você pode definir um novo URL para seu
origin
controle remoto com:Certifique-se de usar
https
e você deve estar ciente de que, se fizer isso, sua senha do GitHub será armazenada em texto sem formatação no.git
diretório, o que é obviamente indesejável.Com qualquer versão do Git (bem, desde a versão 0.99)
Uma abordagem alternativa é colocar seu nome de usuário e senha em seu
~/.netrc
arquivo, embora, como manter a senha na URL remota, isso signifique que sua senha será armazenada no disco em texto sem formatação e, portanto, seja menos segura e não recomendada. No entanto, se você quiser adotar essa abordagem, adicione a seguinte linha ao seu~/.netrc
:... substituindo
<hostname>
pelo nome do host do servidor<username>
e<password>
por seu nome de usuário e senha. Lembre-se também de definir permissões restritivas do sistema de arquivos nesse arquivo:Observe que no Windows, esse arquivo deve ser chamado
_netrc
e talvez você precise definir a variável de ambiente% HOME% - para obter mais detalhes, consulte:fonte
git config --global credential.helper osxkeychain
no OS X. Para outros OS ver help.github.com/articles/set-up-githttps://username:[email protected]/username/project.git
. Torna as senhas de texto simples armazenadas no disco quase seguras o suficiente para serem usadas.git config --global credential.helper cache
não funciona em janelas: stackoverflow.com/questions/11693074/... uso gitcredentialstore no Windows um ser felizVocê também pode fazer com que o Git armazene suas credenciais permanentemente usando o seguinte:
Nota: Embora isso seja conveniente, o Git armazenará suas credenciais em texto não criptografado em um arquivo local (.git-credentials) no diretório do seu projeto (veja o diretório "home" abaixo). Se você não gostar disso, exclua esse arquivo e passe para a opção de cache.
Se você deseja que o Git continue solicitando credenciais sempre que precisar se conectar ao repositório remoto, você pode executar este comando:
Para armazenar as senhas em
.git-credentials
sua%HOME%
diretório em oposição ao diretório do projeto: use a--global
bandeirafonte
git config --global credential.helper store
--global
flag foi redundante. Mesmo sem esse sinalizador, o arquivo de credenciais foi criado no%USER_HOME%
diretórioTLDR; Use um arquivo netrc criptografado com o Git 1.8.3+ .
É possível salvar uma senha para um URL HTTPS do repositório Git com um
~/.netrc
(Unix) ou%HOME%/_netrc
(observe o_
) no Windows.Mas : esse arquivo armazenaria sua senha em texto simples.
Solução : Criptografe esse arquivo com GPG (GNU Privacy Guard) e faça com que o Git descriptografe-o sempre que precisar de uma senha (para
push
/pull
/fetch
/clone
operação).Nota: com o Git 2.18 (Q2 2018), agora você pode personalizar o GPG usado para descriptografar o arquivo criptografado.
.netrc
arquivo .Consulte commit 786ef50 , commit f07eeed (12 de maio de 2018) por Luis Marsano (``) .
(Mesclado por Junio C Hamano -
gitster
- na confirmação 017b7c5 , 30 de maio de 2018)Instruções passo a passo para Windows
Com o Windows:
(O Git tem a
gpg.exe
em sua distribuição, mas o uso de uma instalação completa do GPG inclui agpg-agent.exe
, que memoriza sua frase secreta associada à sua chave GPG.)Instale
gpg4Win Lite
, a interface mínima da linha de comandos do gnupg (pegue a mais recentegpg4win-vanilla-2.X.Y-betaZZ.exe
) e complete o seu PATH com o diretório de instalação do GPG:(Observe o
copy
comando ' ': Git precisará de um script Bash para executar o comando 'gpg
'. Comogpg4win-vanilla-2
vem com elegpg2.exe
, é necessário duplicá-lo.)Crie ou importe uma chave GPG e confie nela:
(Certifique-se de inserir uma senha para essa chave.)
Confie nessa chave
Instale o script auxiliar de credencial em um diretório dentro de
%PATH%
:(Cuidado: o script é renomeado no Git 2.25.x / 2.26, veja abaixo)
(Sim, esse é um script do Bash, mas funcionará no Windows, pois será chamado pelo Git.)
Crie um arquivo _netrc em texto não criptografado
(Não esqueça a
protocol
parte ' ': 'http
' ou 'https
' dependendo do URL que você usará.)Criptografar esse arquivo:
(Agora você pode excluir o
_netrc
arquivo, mantendo apenas o arquivo_netrc.gpg
criptografado.)Use esse arquivo criptografado:
(Observe que '
/
':C:\path\to...
não funcionaria de jeito nenhum.) (Você pode usar primeiro-v -d
para ver o que está acontecendo.)A partir de agora, qualquer comando Git que use uma URL HTTP (S) que exija autenticação descriptografará esse
_netrc.gpg
arquivo e usará o login / senha associado ao servidor que você está entrando em contato. Na primeira vez, o GPG solicitará a senha da sua chave GPG para descriptografar o arquivo. Outras vezes, o gpg-agent iniciado automaticamente pela primeira chamada de GPG fornecerá essa senha para você.Dessa forma, você pode memorizar vários URLs / logins / senhas em um arquivo e armazená-los no seu disco criptografado.
Acho mais conveniente do que um auxiliar de "cache", onde você precisa se lembrar e digitar (uma vez por sessão) uma senha diferente para cada um dos seus serviços remotos, para que a senha seja armazenada em cache na memória.
Com o Git 2.26 (primeiro trimestre de 2020), o auxiliar de credencial de amostra para uso
.netrc
foi atualizado para funcionar imediatamente. Veja patch / discussão .Consulte commit 6579d93 , commit 1c78c78 (20 dez 2019) por Denton Liu (
Denton-L
) .(Incorporado por Junio C Hamano -
gitster
- in commit 1fd27f8 , 25 dez 2019)E:
Com 2.26 (Q1 2020), o auxiliar de credencial de amostra para usar .netrc foi atualizado para funcionar de maneira imediata.
Consulte commit 6579d93 , commit 1c78c78 (20 dez 2019) por Denton Liu (
Denton-L
) .(Incorporado por Junio C Hamano -
gitster
- in commit 1fd27f8 , 25 dez 2019)Jeff King (
peff
) acrescenta:fonte
curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrc
para isso: você precisa copiar o localgit-credential-netrc
em seu caminho ($PATH
), para que o git possa chamar 'credential-netrc
'._netrc
não funcionou para mim em umWindows 7
PC, mas.netrc
funcionou para o youtube-dl com o--netrc
argumento passado a ele.https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl
(canalizando sete anos depois 😉)Existe uma maneira fácil e antiquada de armazenar credenciais de usuário em um URL HTTPS:
Você pode alterar o URL com
git remote set-url <remote-repo> <URL>
A desvantagem óbvia dessa abordagem é que você precisa armazenar a senha em texto sem formatação. Você ainda pode inserir o nome de usuário (
https://[email protected]/...
), que pelo menos poupará metade do aborrecimento.Você pode preferir mudar para SSH ou usar o software cliente GitHub.
fonte
Use um armazenamento de credenciais.
Para o Git 2.11+ no OS X e Linux , use o armazenamento de credenciais incorporado do Git :
Para o msysgit 1.7.9+ no Windows :
Para o Git 1.7.9+ no OS X, use:
fonte
git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get
( mais detalhes aqui ). Você sempre deve usar um token de acesso pessoal com isso e, é claro, usar 2FA na sua conta do GitHub.Você pode apenas usar
Quando você digitar a senha da próxima vez com pull ou push, ela será armazenada no arquivo .git-credentials como texto sem formatação (um pouco inseguro, mas apenas coloque-o em uma pasta protegida).
E é isso, como declarado nesta página:
git-credential-store
fonte
git config credential.helper manager
vez dissoNão foi imediatamente óbvio para mim que eu precisava baixar o ajudante primeiro! Encontrei o download credential.helper no Autenticador permanente do Atlassian com repositórios Git .
Citar:
Siga estas etapas se desejar usar o Git com cache de credenciais no OS X:
Faça o download do binário git-credential-osxkeychain.
Execute o comando abaixo para garantir que o binário seja executável:
Coloque no diretório
/usr/local/bin
.Execute o comando abaixo:
fonte
Basta incluir as credenciais de login como parte da URL:
Nota: Eu não recomendo este método, mas se você estiver com pressa e mais nada funcionar, poderá usar esse método.
fonte
Em uma configuração do GNU / Linux, um ~ / .netrc também funciona muito bem:
Pode depender de quais bibliotecas de rede o Git está usando para o transporte HTTPS .
fonte
chmod 0600 ~/.netrc
.Para Windows, você pode usar o Git Credential Manager plug-in (GCM). Atualmente, é mantido pela Microsoft. O bom é que ela salva a senha no Windows Credential Store, não como texto sem formatação.
Há um instalador na página de lançamentos do projeto. Isso também instalará a versão oficial do Git for Windows com o gerenciador de credenciais embutido. Permite autenticação de dois fatores para o GitHub (e outros servidores). E possui uma interface gráfica para efetuar login inicialmente.
Para usuários do Cygwin (ou usuários que já usam o Git for Windows oficial), você pode preferir a instalação manual. Faça o download do pacote zip na página de lançamentos . Extraia o pacote e execute o
install.cmd
arquivo. Isso será instalado na sua~/bin
pasta. (Verifique se o~/bin
diretório está no seu PATH.) Você o configura usando este comando:O Git executará o
git-credential-manager.exe
quando se autenticar em qualquer servidor.fonte
printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get
( mais detalhes aqui ). Você sempre deve usar um token de acesso pessoal com isso e, é claro, usar 2FA na sua conta do GitHub.Se você não deseja armazenar sua senha em texto sem formatação, como Mark disse, você pode usar um URL do GitHub diferente para buscar do que para enviar. No seu arquivo de configuração, em
[remote "origin"]
:Ele ainda solicitará uma senha quando você pressionar, mas não quando buscar, pelo menos para projetos de código aberto.
fonte
OAuth
Você pode criar seu próprio token de API pessoal ( OAuth ) e usá-lo da mesma maneira que usaria suas credenciais normais (em
/settings/tokens
:). Por exemplo:.netrc
Outro método é configurar seu usuário / senha
~/.netrc
(_netrc
no Windows), por exemploPara HTTPS, adicione a linha extra:
Um auxiliar de credencial
Para armazenar em cache sua senha do GitHub no Git ao usar HTTPS, você pode usar um auxiliar de credencial para dizer ao Git para lembrar seu nome de usuário e senha do GitHub toda vez que conversar com o GitHub.
git config --global credential.helper osxkeychain
(osxkeychain helper
é obrigatório),git config --global credential.helper wincred
git config --global credential.helper cache
Relacionado:
fonte
Você pode usar ajudantes de credenciais.
Onde
x
é o número de segundos.fonte
store
,cache
e outras coisas comuns estão listados e explicados?Depois de clonar o repositório
repo
, você pode editarrepo/.git/config
e adicionar algumas configurações, como abaixo:Então você não será solicitado
username
epassword
novamente.fonte
helper = manager
(mas me pedem nome de usuário + repositório para o primeiro envio).Sei que essa não é uma solução segura, mas às vezes você precisa apenas de uma solução simples - sem instalar mais nada. E como helper = store não funcionou para mim, criei um auxiliar fictício:
Crie um script e coloque-o na pasta bin de usuários, aqui chamada credfake , esse script fornecerá seu nome de usuário e sua senha:
torne-o executável:
então configure-o no git:
(ou use-o sem --global apenas para um repositório)
e - voilá - git usará este usuário + senha.
fonte
Um token de autenticação deve ser usado em vez da senha da conta. Vá para configurações / aplicativos do GitHub e crie um token de acesso pessoal. O token pode ser usado da mesma maneira que uma senha.
O token destina-se a permitir que os usuários não usem a senha da conta para o trabalho do projeto. Use a senha apenas ao realizar trabalhos de administração, como criar novos tokens ou revogar tokens antigos.
Em vez de um token ou senha que concede ao usuário acesso total a uma conta do GitHub, uma chave de implantação específica do projeto pode ser usada para conceder acesso a um único repositório do projeto. Um projeto Git pode ser configurado para usar essa chave diferente nas etapas a seguir, quando você ainda pode acessar outras contas ou projetos Git com sua credencial normal:
Host
,IdentityFile
para a chave de implantação, talvezUserKnownHostsFile
oe talvez oUser
(embora eu ache que você não precise dele).ssh -F /path/to/your/config $*
GIT_SSH=/path/to/your/wrapper
antes do seu comando Git normal. Aqui ogit remote
(origem) deve usar o[email protected]:user/project.git
formato.fonte
É melhor usar credenciais para segurança, mas você pode mantê-lo por algum tempo usando o cache:
Suas credenciais serão salvas por 3600 segundos.
fonte
--timeout
e as credenciais serão armazenadas para sempre.windowsservercore
)?As coisas são um pouco diferentes se você estiver usando autenticação de dois fatores como eu. Como não encontrei uma boa resposta em outro lugar, colocarei uma aqui para que talvez eu possa encontrá-la mais tarde.
Se você estiver usando autenticação de dois fatores, especificar o nome de usuário / senha nem funcionará - você terá acesso negado. Mas você pode usar um token de acesso ao aplicativo e usar o assistente de credencial do Git para armazená-lo em cache. Aqui estão os links pertinentes:
E não me lembro de onde vi isso, mas quando você solicita seu nome de usuário, é onde você coloca o token de acesso ao aplicativo. Em seguida, deixe a senha em branco. Funcionou no meu Mac.
fonte
Isso funciona para mim, estou usando o Windows 10
fonte
Normalmente você tem um URL remoto, algo como isto,
Se você quiser pular nome de usuário e senha enquanto estiver usando
git push
, tente o seguinte:Acabei de adicionar o mesmo URL (com detalhes do usuário, incluindo senha) à origem.
NOTA: Não funciona se o nome de usuário for um ID de email.
fonte
Eu recebi minha resposta da página de manual gitcredentials (7) . No meu caso, não tenho cache de credenciais na instalação do Windows; Eu uso a loja de credenciais.
Depois de usar o armazenamento de credenciais, o nome de usuário / senha são armazenados no arquivo [pasta do usuário] / .git-credentials. Para remover o nome de usuário / senha, basta excluir o conteúdo do arquivo.
fonte
git config --global credential.helper wincred
essa senha permanentemente.A documentação do compositor menciona que você pode impedir que ela use a API do GitHub, para que ela atue como
git clone
:Portanto, a seção ficaria assim:
Lembre-se de que a API existe por um motivo. Portanto, este deve ser um método de último recurso em relação ao aumento de carga no github.com.
fonte
Você também edita o bashrc arquivo e adiciona um script nele.
Isso pedia sua senha uma vez quando você inicia o Git e a lembra até que você se desconecte.
fonte
Se você estiver usando
osxkeychain
e tiver expirado um token e quiser atualizá-lo, siga estas etapas:Execute o terminal e pressione enter duas vezes.
Agora você deve ser solicitado a fornecer um nome de usuário / senha. No entanto, às vezes parece que isso não é necessário e você deve continuar entrando novamente.
Nesse caso, reinicie o computador . Agora, da próxima vez que você executar um comando git e digitar seu nome de usuário / senha, ele será salvo.
fonte