Estou clonando um repositório git em um script como este:
git clone https://user:[email protected]/name/.git
Isso funciona, mas meu nome de usuário e minha senha! agora são armazenados no URL de origem em .git/config
.
Como posso evitar isso, mas ainda fazer isso em um script (portanto, não há entrada manual de senha)?
O método que eu uso é realmente usar um
git pull
em vez de um clone. O script ficaria assim:Isso não armazenará seu nome de usuário ou senha em
.git/config
. No entanto, a menos que outras etapas sejam executadas, o nome de usuário e a senha em texto simples ficarão visíveis enquanto o processo estiver sendo executado a partir de comandos que mostram os processos atuais (por exemplo,ps
).Conforme mencionado nos comentários, como esse método está usando HTTPS , você também deve codificar em URL quaisquer caracteres especiais que possam aparecer em sua senha.
Outra sugestão que eu faria (se você não puder usar ssh) é realmente usar um token OAuth em vez de nome de usuário/senha de texto simples, pois é um pouco mais seguro. Você pode gerar um token OAuth nas configurações do seu perfil: https://github.com/settings/tokens .
Então, usando esse token, o comando pull seria
IMO a melhor solução é usar um
GIT_ASKPASS
ajudante personalizado e entregar a senha como outra variável de ambiente. Então, por exemplo, crie um arquivogit-askpass-helper.sh
como:e, em seguida, execute
git clone https://username@hostname/repo
com variáveis de ambienteGIT_ASKPASS=/path/to/git-askpass-helper.sh
eGIT_PASSWORD=nuclearlaunchcodes
.Isso tem a vantagem de que a senha também não estará visível na lista de processos.
Depois de passar por dezenas de posts SO, blogs, etc, experimentei todos os métodos, e foi isso que surgiu. Cobre TUDO.
Veja o Cheatsheet de Credenciais e Pacotes Privados do Git
Essas são todas as maneiras e ferramentas pelas quais você pode autenticar o git com segurança para clonar um repositório sem um prompt de senha interativo .
Melhores opções para armazenamento sem texto simples
Pelo que é perguntado aqui, as chaves SSH
GIT_ASKPASS
ougit credential store
o uso do gerenciador de chaves do sistema operacional podem ser a melhor escolha.Como o GIT_ASKPASS é provavelmente o menos compreendido dos 3, vou detalhar isso aqui - e os outros estão na folha de dicas.
GIT_ASKPASS
Como criar um
GIT_ASKPASS
roteiro:Como usá-lo:
O script recebe stdin na forma de:
O script recebe Git ENVs como:
Mais detalhes na folha de dicas .
Você pode inserir suas credenciais de conexão em seu
~/.netrc
arquivo. Algo na linha de:Apenas certifique-se de chmod esse arquivo para 600. Se você estiver usando o Windows, o link a seguir pode ser útil: https://stackoverflow.com/questions/6031214/git-how-to-use-netrc-file-on- windows-to-save-user-and-password
Pessoalmente, costumo usar chaves SSH para fins de autenticação (se você tiver permissão, é claro).
Armazene seu token ou senha em algum lugar seguro, por exemplo, passe .
Em seguida, use um script bash para mapear o git
host
para seu armazenamento de senhas, por exemplo:Mudança
your_username
etoken_github.com
a maneira como você o configura.Fonte .