metodo della riga di comando o aggiungere a livello di codice la chiave ssh all'account utente github.com


18

Esiste un modo per identificarsi con un nome utente e una password sui server github.com allo scopo di aggiungere una chiave ssh all'account utente github? Finora tutto ciò che ho letto suggerisce che la chiave ssh di un utente deve essere aggiunta tramite la GUI Web. Sto cercando il metodo o il processo di aggiunta di una chiave tramite un'interfaccia della riga di comando oppure uno script bash / ansible / qualcosa.


1
Che ne dici di usare qualche libreria per usare l'API di GitHub ?
sr_

Risposte:


15

L'autenticazione con nome utente e password è supportata da github api :

Esistono tre modi per autenticarsi tramite GitHub API v3. ...
Autenticazione di base
$ curl -u "nome utente" https://api.github.com
...

Quindi basta scegliere una lib nella lingua che preferisci e utilizzare la versione implementata della sezione API "Chiave pubblica" Crea una chiave pubblica:

Crea una chiave pubblica. Richiede l'autenticazione tramite Basic Auth o OAuth con almeno l'ambito [write: public_key].

INGRESSO
POST /user/keys

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

Se si desidera utilizzarlo dalla riga di comando (tramite arricciatura):

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

o anche senza richiedere la password:

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

ecco un piccolo tutorial per usare curl per interagire con l'API github


Questo è esattamente il tipo di informazioni che stavo cercando! Grazie mille!
cmosetick,

7

Simile alla risposta di xx4h, ecco come lo faccio negli script per automatizzare le nuove configurazioni di VM.

ssh-keygen -t rsa -b 4096 -C "myemailaddress@hotmail.com"
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

Ti dà una nuova chiave SSH, la include nella chiamata curl e ti dà un nome univoco ma ancora facilmente identificabile per ognuno sul lato GitHub (ad esempio, eseguire ora darebbe DevVm_150602142247).


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="git@github.com: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}

0

Un'altra opzione è quella di usare un token API ... Uso il seguente sul nostro server gitLab interno

frammento:

#!/bin/bash

myemail="first.last@domain.com"

# 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="git@git.labs.domain.com: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}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.