méthode en ligne de commande ou ajouter par programme la clé ssh au compte utilisateur github.com

18

Existe-t-il un moyen de s'identifier avec un nom d'utilisateur et un mot de passe aux serveurs github.com dans le but d'ajouter une clé ssh au compte utilisateur github? Jusqu'à présent, tout ce que j'ai lu suggère que la clé ssh d'un utilisateur doit être ajoutée via l'interface graphique Web. Je cherche la méthode ou le processus d'ajout d'une clé via une interface de ligne de commande ou bien un script bash / ansible / quelque chose.

cmosetick
la source
1
Que diriez-vous d'utiliser une bibliothèque pour utiliser l'API de GitHub ?
sr_

Réponses:

15

L'authentification avec nom d'utilisateur et mot de passe est prise en charge par github api :

Il existe trois façons de s'authentifier via GitHub API v3. ...
Authentification de base
$ curl -u "nom d'utilisateur" https://api.github.com
...

Il vous suffit donc de choisir une bibliothèque dans la langue que vous préférez et d'utiliser la version implémentée de la section API Créer une clé publique "Clé publique":

Crée une clé publique. Nécessite que vous soyez authentifié via Basic Auth ou OAuth avec au moins la portée [write: public_key].

CONTRIBUTION
POST /user/keys

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

Si vous souhaitez l'utiliser à partir de la ligne de commande (via curl):

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

ou même sans demander de mot de passe:

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

voici un joli petit tutoriel pour utiliser curl pour interagir avec l'API github

xx4h
la source
C'est exactement le genre d'informations que je cherchais! Merci beaucoup!
cmosetick
7

Semblable à la réponse de xx4h, voici comment je le fais dans les scripts pour automatiser les nouvelles configurations de VM.

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

Il vous donne une nouvelle clé SSH, l'inclut dans l'appel curl et donne un nom unique mais toujours facilement identifiable pour chacun du côté GitHub (par exemple, exécuter maintenant donnerait DevVm_150602142247).

nathanchere
la source
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}
Darren Dwyer
la source
0

Une autre option consiste à utiliser un jeton d'API ... J'utilise ce qui suit sur notre serveur gitLab interne

fragment:

#!/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}
Lars
la source