Como dar nome de usuário / senha para git clone em um script, mas não armazene credenciais em .git / config

22

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 faço isso em um script (sem entrada de senha manual)?

    
por Nathan 15.11.2016 / 16:35

3 respostas

17

O método que eu uso é realmente usar um git pull em vez de um clone. O script seria parecido com:

mkdir repo
cd repo
git init
git config user.email "email"
git config user.name "user"
git pull https://user:[email protected]/name/repo.git master

Isso não armazenará seu nome de usuário ou senha em .git/config . No entanto, a menos que outras etapas sejam tomadas, 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 ).

Uma outra sugestão que eu faria (se você não pode usar o ssh) é realmente usar um token OAuth em vez do nome de usuário / senha do texto simples, já que é um pouco mais seguro. Você pode gerar um token OAuth a partir das configurações do seu perfil: link .

Em seguida, usando esse token, o comando pull seria

git pull https://$OAUTH_TOKEN:[email protected]/name/repo.git master
    
por 16.11.2016 / 02:33
10

Você pode inserir suas credenciais de conexão no seu arquivo ~/.netrc . Algo ao longo das linhas de:

machine host.example.net
login bart
password eatmyshorts

Apenas certifique-se de chmodar esse arquivo para 600. Se você estiver usando o Windows, o seguinte link pode ser útil:

Pessoalmente, tenho a tendência de usar chaves SSH para fins de autenticação (se você tiver permissão, é claro).

    
por 15.11.2016 / 17:16
5

IMO a melhor solução é usar um assistente GIT_ASKPASS personalizado e entregar a senha como outra variável de ambiente. Por exemplo, crie um arquivo git-askpass-helper.sh as:

#!/bin/sh
exec echo "$GIT_PASSWORD"

e, em seguida, execute git clone https://username@hostname/repo com as variáveis de ambiente GIT_ASKPASS=/path/to/git-askpass-helper.sh e GIT_PASSWORD=nuclearlaunchcodes .

Isso tem a vantagem de a senha não ficar visível na lista de processos também.

    
por 18.05.2018 / 11:20

Tags