Envie para o GitHub sem uma senha usando a tecla ssh


215

Gerei um par de chaves SSH sem senha e adicionei a chave pública ao GitHub.

Conexão com

user@dev:/var/www/project# ssh -T git@github.com
Hi User! You've successfully authenticated, but GitHub does not provide shell access.

foi bem-sucedido e quando eu renomeio a chave, ela falha.

Mas quando quero enviar minhas alterações, ele ainda solicita minha combinação de nome de usuário e senha.

Existe uma maneira de enviar sem uma senha?


9
Verifique se você não está usando https://github...em seus controles remotos. Eles também devem seguir o git@github...formato.
Cjc343

Respostas:


419

Se estiver solicitando um nome de usuário e senha, o controle remoto de origem estará apontando para o URL HTTPS, em vez do URL SSH.

Mude para ssh.

Por exemplo, um projeto do GitHub como o Git terá um URL HTTPS:

https://github.com/<Username>/<Project>.git

E o SSH:

git@github.com:<Username>/<Project>.git

Você pode fazer:

git remote set-url origin git@github.com:<Username>/<Project>.git

para alterar o URL.


4
Isso resolveu o problema, mas continuo me perguntando por que o Github recomendaria que você apontasse o final remoto de um novo repositório para um URL http por padrão. Acabei de criar um repositório a partir do zero e me foi apresentada uma opção para definir um URL remoto https, não um git.
Preslav Rachev

2
Aqui está uma rápida comando shell de uma linha que vai mudar automaticamente o seu https url para o git apropriado (só funciona para urls github!):git remote set-url origin $(git remote show origin | grep "Fetch URL" | sed 's/ *Fetch URL: //' | sed 's/https:\/\/github.com\//git@github.com:/')
Christopher Shroba

11

Além disso, para gists, parece que você deve deixar de fora o nome de usuário

git remote set-url origin git@gist.github.com:<Project code>

10

Caso você esteja realmente usando a URL SSH, mas ainda seja solicitado o nome de usuário e a senha ao pressionar git:

git remote set-url origin git@github.com:<Username>/<Project>.git

Você deve tentar solucionar problemas com:

ssh -vT git@github.com

Abaixo está um pedaço de amostra de saída:

...
debug1: Trying private key: /c/Users/Yuci/.ssh/id_rsa
debug1: Trying private key: /c/Users/Yuci/.ssh/id_dsa
debug1: Trying private key: /c/Users/Yuci/.ssh/id_ecdsa
debug1: Trying private key: /c/Users/Yuci/.ssh/id_ed25519
debug1: No more authentication methods to try.
Permission denied (publickey).

Na verdade, eu já adicionei a chave pública ao GitHub antes e também tenho a chave privada localmente. No entanto, minha chave privada tem um nome diferente chamado /c/Users/Yuci/.ssh/github_rsa.

De acordo com o exemplo de saída, o Git está tentando /c/Users/Yuci/.ssh/id_rsa, o que eu não tenho. Portanto, eu poderia simplesmente copiar github_rsapara id_rsao mesmo diretório.

cp /c/Users/Yuci/.ssh/github_rsa /c/Users/Yuci/.ssh/id_rsa

Agora, quando corro ssh -vT git@github.comnovamente, tenho:

...
debug1: Trying private key: /c/Users/Yuci/.ssh/id_rsa
debug1: Authentication succeeded (publickey).
...
Hi <my username>! You've successfully authenticated, but GitHub does not provide shell access.
...

E agora eu posso enviar para o GitHub sem ser solicitado o nome de usuário e a senha :-)


5

Você precisa usar a versão SSH , não HTTPS . Ao clonar de um repositório, copie o link com a versão SSH , porque o SSH é fácil de usar e resolve todos os problemas de acesso. Você pode definir o acesso para cada SSH inserido na sua conta (como push, pull, clone, etc ...)

Aqui está um link, que diz por que precisamos do SSH e como usá-lo: passo a passo

Git gerar chaves SSH


0

Como de costume, crie uma chave SSH e cole a chave pública no GitHub. Adicione a chave privada ao ssh-agent. (Presumo que foi isso que você fez.)

Para verificar se tudo está correto, use ssh -T git@github.com

Em seguida, não esqueça de modificar o ponto remoto da seguinte maneira:

git remote set-url origin git@github.com:username/your-repository.git

-4

Usando a linha de comando:

Digite ls -al ~/.sshpara ver se as chaves SSH existentes estão presentes.

No terminal é mostrado: Nenhum diretório existe

Em seguida, gere uma nova chave SSH

Passo 1.

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

passo 2.

Enter a file in which to save the key (/Users/you/.ssh/id_rsa): <here is file name and enter the key>

etapa 3.

Enter passphrase (empty for no passphrase): [Type a password]

Enter same passphrase again: [Type password again]

Desculpe, esta questão não é sobre como criar as chaves, mas configurar o git para usar a chave em vez da autenticação #
7892
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.