método de linha de comando ou adicionar programaticamente a chave ssh à conta de usuário do github.com

16

Existe uma maneira de se identificar com um nome de usuário e senha para os servidores github.com com o propósito de adicionar uma chave ssh à conta de usuário do github? Até agora, tudo que eu li sugere que a chave ssh de um usuário deve ser adicionada via GUI da web. Eu estou procurando o método ou processo de adicionar uma chave através de uma interface de linha de comando ou então um script bash / ansible / something.

    
por cmosetick 13.06.2014 / 09:01

4 respostas

12

A autenticação com nome de usuário e senha é suportada pela API do github :

There are three ways to authenticate through GitHub API v3. ...
Basic Authentication
$ curl -u "username" https://api.github.com
...

Então, apenas escolha um lib no idioma de sua preferência e use a versão implementada do Crie uma chave pública Seção da API "Chave pública":

Creates a public key. Requires that you are authenticated via Basic Auth, or OAuth with at least [write:public_key] scope.

ENTRADA em POST /user/keys

{
    "title": "octocat@octomac",
    "key": "ssh-rsa AAA..."
}

Se você quiser usá-lo na linha de comando (via curl):

curl -u "username" --data '{"title":"test-key","key":"ssh-rsa AAA..."}' https://api.github.com/user/keys

ou mesmo sem solicitar senha:

curl -u "username:password" --data '{"title":"test-key","key":"ssh-rsa AAA..."}' https://api.github.com/user/keys

aqui está um pequeno tutorial para usar o curl para interagir com a API do github

    
por 13.06.2014 / 09:21
7

Semelhante à resposta do xx4h, é assim que faço em scripts para automatizar novas configurações de VMs.

ssh-keygen -t rsa -b 4096 -C "[email protected]"
curl -u "myusername" \
    --data "{\"title\":\"DevVm_'date +%Y%m%d%H%M%S'\",\"key\":\"'cat ~/.ssh/id_rsa.pub'\"}" \
    https://api.github.com/user/keys

Ele fornece uma nova chave SSH, inclui-a na chamada curl e fornece um nome exclusivo, mas ainda facilmente identificável, para cada um no lado do GitHub (por exemplo, executar agora daria DevVm_150602142247).

    
por 02.06.2015 / 21:24
1
#!/bin/bash

set -xe
myemail="your-email"

#your personal access token
git_api_token="befdf14c152d6f2ad8cff9c5affffffffffffffffff"

#We'll use the HTTPS to push a ssh key to git, SSH for pull/push configuration
gitrepo_ssh="[email protected]:person/repo.git"
gitrepo_https="https://github.com/person/repo.git"

#Generating SSH key:
ssh-keygen -f "${HOME}/.ssh/id_rsa" -t rsa -b 4096 -C "${myemail}" -N ''
sslpub="$(cat ${HOME}/.ssh/id_rsa.pub |tail -1)"

#git API path for posting a new ssh-key:
git_api_addkey="https://api.$(echo ${gitrepo_https} |cut -d'/' -f3)/user/keys"

#lets name the ssh-key in get after the hostname with a timestamp:
git_ssl_keyname="$(hostname)_$(date +%d-%m-%Y)"

#Finally lets post this ssh key:
curl -H "Authorization: token ${git_api_token}" -H "Content-Type: application/json" -X POST -d "{\"title\":\"${git_ssl_keyname}\",\"key\":\"${sslpub}\"}" ${git_api_addkey}
    
por 19.11.2016 / 06:49
0

Outra opção é usar um token de API ... Eu uso o seguinte em nosso servidor gitLab interno

snippet:

#!/bin/bash

myemail="[email protected]"

# User API token can be found: "https://git.labs.domain.com/profile/account"
git_api_token="m3iP27Jh8KSgNmWAksYp"

# We'll use the HTTPS to push a ssh key to git, SSH for pull/push configuration
gitrepo_ssh="[email protected]:devops/automation.git"
gitrepo_https="https://git.labs.domain.com/devops/automation.git"

########################]  D O   N O T   C H A N G E  [########################

# Generating SSH key:
ssh-keygen -f "${HOME}/.ssh/id_rsa" -t rsa -b 4096 -C "${myemail}" -N ''
sslpub="$(cat ${HOME}/.ssh/id_rsa.pub |tail -1)"

# git API path for posting a new ssh-key:
git_api_addkey="https://$(echo ${gitrepo_https} |cut -d'/' -f3)/api/v3/user/keys"

# lets name the ssh-key in get after the hostname with a timestamp:
git_ssl_keyname="$(hostname)-$(date +%Y%m%d%H%M%S)"

# Finally lets post this ssh key:
curl -H "PRIVATE-TOKEN: ${git_api_token}" -H "Content-Type: application/json" \
    -X POST -d "{\"title\":\"${git_ssl_keyname}\",\"key\":\"${sslpub}\"}"     \
    ${git_api_addkey}
    
por 19.01.2016 / 21:12