Eu git push
trabalho para um repositório Git remoto.
Todo mundo push
vai me pedir para inserir username
e password
. Gostaria de evitá-lo a cada push, mas como configurar para evitá-lo?
Eu git push
trabalho para um repositório Git remoto.
Todo mundo push
vai me pedir para inserir username
e password
. Gostaria de evitá-lo a cada push, mas como configurar para evitá-lo?
Respostas:
Abra o terminal para criar chaves ssh:
cd ~ #Your home directory
ssh-keygen -t rsa #Press enter for all values
(Funciona apenas se o programa de confirmação for capaz de usar certificados / chaves ssh públicas e privadas)
Aqui está uma explicação passo a passo sobre o putty gen para as etapas acima
Esta etapa varia, dependendo de como o controle remoto estiver configurado.
Se for um repositório do GitHub e você tiver privilégios administrativos, vá para configurações e clique em 'adicionar chave SSH'. Copie o conteúdo ~/.ssh/id_rsa.pub
para o campo 'Chave'.
Se o seu repositório for administrado por outra pessoa, dê ao administrador o seu id_rsa.pub
.
Se o seu repositório remoto for administrado pelo seu, você pode usar este comando, por exemplo:
scp ~/.ssh/id_rsa.pub YOUR_USER@YOUR_IP:~/.ssh/authorized_keys/id_rsa.pub
Se você executou as etapas acima e ainda está recebendo a solicitação de senha, verifique se o URL do repo está no formato
git+ssh://git@github.com/username/reponame.git
em oposição a
https://github.com/username/reponame.git
Para ver seu URL de repo, execute:
git remote show origin
Você pode alterar o URL com:
git remote set-url origin git+ssh://git@github.com/username/reponame.git
[1] Esta seção incorpora a resposta de Eric P
git remote set-url origin git@github.com:/username/projectname.git
Execute o seguinte comando para ativar o cache de credenciais.
$ git config credential.helper store
$ git push https://github.com/repo.git
Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>
O uso também deve especificar o vencimento do cache ,
git config --global credential.helper 'cache --timeout 7200'
Depois de ativar o cache de credenciais, ele será armazenado em cache por 7200 segundos (2 horas) .
Nota: Auxiliar de credencial armazenando senha não criptografada no disco local.
git
manual: "O uso desse auxiliar armazena suas senhas não criptografadas no disco, protegidas apenas pelas permissões do sistema de arquivos".
store
assistente de credencial que armazena a senha no disco não criptografado.
git config --unset credential.helper
Se você já possui suas chaves SSH configuradas e ainda recebe a solicitação de senha, verifique se o URL do repo está no formato
git+ssh://git@github.com/username/reponame.git
em oposição a
https://github.com/username/reponame.git
Para ver seu URL de repo, execute:
git remote show origin
Você pode alterar o URL da seguinte git remote set-url
forma:
git remote set-url origin git+ssh://git@github.com/username/reponame.git
git init
localmente e tentei enviar depois de adicionar o controle remoto de um novo repositório no site do GitHub.
git@github.com/username/reponame.git
Basta usar a --repo
opção para o comando git push. Como isso:
$ git push --repo https://name:password@bitbucket.org/name/repo.git
git remote set-url origin https://name:password@github.com/repo.git
name@github.com/....git
também funciona se você não se importar de ser incomodado com a senha todas as vezes.
git push --repo https://github.com/Username/repo
ele funciona sem a .git
extensão
Você pode usar o git-credential-store via
git config credential.helper store
que armazena sua senha não criptografada no sistema de arquivos :
O uso desse auxiliar irá armazenar suas senhas não criptografadas no disco, protegidas apenas pelas permissões do sistema de arquivos. Se essa não é uma troca de segurança aceitável, tente git-credential-cache ou encontre um auxiliar que se integre ao armazenamento seguro fornecido pelo seu sistema operacional.
Use o git-credential-cache que, por padrão, armazena a senha por 15 minutos.
git config credential.helper cache
para definir um tempo limite diferente, use --timeout
(aqui 5 minutos)
git config credential.helper 'cache --timeout=300'
- 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. Executando o seguinte na linha de comando irá activar esta funcionalidade:
git config --global credential.helper osxkeychain
. Você precisará armazenar as credenciais no Keychain usando o aplicativo Keychain também.- 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 . [enfatiza o meu]
credential.helper cache
não funciona. Deveria ser git config --global credential.helper wincred
.
Passo 1 -
Crie chaves SSH no seu sistema Linux usando o comando abaixo
ssh-keygen -t rsa -b 4096 -C "your_email"
Ele solicitará a senha e o nome do arquivo (o padrão será ~ / .ssh / id_rsa, ~ / .ssh / id_rsa.pub)
Passo 2 -
Após a criação dos arquivos, adicione a chave pública id_rsa.pub à seção ssh da conta do github.
Etapa 3 -
Na sua máquina, adicione a chave privada id_rsa ao ssh-agent usando o comando abaixo
ssh-add ~/.ssh/id_rsa
Passo 4 -
Agora adicione o URL remoto git@github.com: user_name / repo_name.git ao seu repositório git local usando o comando abaixo.
git remote remove origin
git remote add origin git@github.com:user_name/repo_name.git
É isso aí.
Conecte seu cliente git ao seu armazenamento de credenciais do SO. Por exemplo, no Windows, você vincula o auxiliar de credencial ao wincred:
git config --global credential.helper wincred
Existe uma maneira de pular a digitação de senha ao usar https: // no GitHub?
No sistema operacional Windows, use isso em vez disso, funciona para mim:
https://{Username}:{Password}@github.com/{Username}/{repo}.git
por exemplo
git clone https://{Username}:{Password}@github.com/{Username}/{repo}.git
git pull https://{Username}:{Password}@github.com/{Username}/{repo}.git
git remote add origin https://{Username}:{Password}@github.com/{Username}/{repo}.git
git push origin master
Só queria destacar algo sobre a solução mencionada várias vezes:
git config credential.helper store
Você pode usar qualquer comando que exija uma senha depois disso. Você não precisa empurrar. (você também pode obter, por exemplo) Depois disso, não será necessário digitar seu nome de usuário / senha novamente.
Até onde eu sei, existem simplesmente duas maneiras seguras : ssh ou passwd criptografados usando um keystore .
cat ~/.ssh/id_rsa.pub
, cole-o lá, nomeie-o e salve-o (se você não tiver esse arquivo, gere um para si mesmo ssh-keygen -t rsa
- apenas Enter para todos os prompts);git remote set-url origin git+ssh://git@github.com/username/reponame.git
- você pode verificá-lo primeiro por git remote -v
);touch t; git add t; git commit -m "test"; git push
e confirme que sim para aproveitar o mundo sem senha .Se você usar git config --global credential.helper store
como as outras pessoas mencionadas, suas senhas não criptografadas serão armazenadas em um texto simples, sob o ~/.git-credentials
qual não é seguro como parece.
Tente criptografá- lo como
sudo apt-get install libgnome-keyring-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring
git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring
git config --global credential.helper store
Nesse caso, você está usando
https://git@github.com/username/reponame.git
.
Minha solução no Windows:
ssh-keygen -t rsa
(Pressione enter para todos os valores)Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
Se o seu PC estiver seguro ou você não se importa com a segurança da senha, isso pode ser conseguido com muita simplicidade. Supondo que o repositório remoto esteja no GitHub e origin
seja seu nome local para o repositório remoto, use este comando
git remote set-url --push origin https://<username>:<password>@github.com/<repo>
O --push
sinalizador garante que isso mude a URL do repositório apenas para o git push
comando. (A pergunta feita na postagem original é git push
apenas sobre comando. Exigir um nome de usuário + senha apenas para operações push é a configuração normal para repositórios públicos no GitHub. Observe que repositórios privados no GitHub também exigiriam um nome de usuário + senha para operações de extração e busca , portanto, para um repositório privado, você não gostaria de usar o --push flag
...)
AVISO: isso é inerentemente inseguro porque:
seu provedor de serviços de Internet ou qualquer pessoa que acesse sua rede, pode ver facilmente a senha em texto sem formatação no URL;
qualquer pessoa que tenha acesso ao seu PC pode visualizar sua senha usando git remote show origin
.
É por isso que usar uma chave SSH é a resposta aceita.
Mesmo uma chave SSH não é totalmente segura . Qualquer pessoa que obtenha acesso ao seu PC ainda pode, por exemplo, fazer empurrões que destroem seu repositório ou - pior ainda - enviar por push, fazendo alterações sutis no seu código. (Todas --amend
as confirmações por push são obviamente muito visíveis no GitHub. Mas se alguém quisesse alterar seu código clandestinamente, elas poderiam fazer uma confirmação anterior sem alterar a mensagem de confirmação e depois forçá-la. Isso seria furtivo e bastante difícil de observar na prática. )
Mas revelar sua senha é pior . Se um invasor obtiver conhecimento do seu nome de usuário + senha, poderá fazer coisas como bloquear você da sua própria conta, excluir sua conta, excluir permanentemente o repositório etc.
Como alternativa - por simplicidade e segurança - você pode fornecer apenas seu nome de usuário no URL, para que você precise digitar sua senha toda vez git push
que precisar, mas não precisará fornecer seu nome de usuário todas as vezes. (Eu gosto muito dessa abordagem, ter que digitar a senha me dá uma pausa para pensar cada vez que eu git push
, então não posso git push
por acidente.)
git remote set-url --push origin https://<username>@github.com/<repo>
@
, ele está quebrando o comando pensando em senha após @ como parte do servidor git?
Tudo isso ocorre porque o git não fornece uma opção nos comandos clone / pull / push / fetch para enviar as credenciais através de um canal. Embora ele dê credential.helper, ele armazena no sistema de arquivos ou cria um daemon etc. Geralmente, as credenciais do GIT são aquelas no nível do sistema e o ônus de mantê-las seguras é no aplicativo que chama os comandos git. Muito inseguro mesmo.
Aqui está o que eu tive que contornar. 1. A versão do Git (git --version) deve ser maior ou igual a 1.8.3.
GIT CLONE
Para a clonagem, use "git clone URL" depois de alterar a URL do formato, http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git} para http: // {myuser}: {mypwd} @ {my_repo_ip_address} /{myrepo_name.git}
Em seguida, limpe o repositório da senha como na próxima seção.
PURGING
Agora, isso teria ido e
Se seu aplicativo estiver usando Java para emitir esses comandos, use ProcessBuilder em vez de Runtime. Se você deve usar o Runtime, use getRunTime (). Exec, que recebe o array String como argumentos com / bin / bash e -c como argumentos, em vez do que aceita um único String como argumento.
GIT FETCH / PULL / PUSH