Befehlszeilenmethode oder programmgesteuertes Hinzufügen des SSH-Schlüssels zum github.com-Benutzerkonto

18

Gibt es eine Möglichkeit, sich mit einem Benutzernamen und einem Kennwort bei github.com-Servern zu identifizieren, um dem github-Benutzerkonto einen SSH-Schlüssel hinzuzufügen? Bisher deutet alles, was ich gelesen habe, darauf hin, dass der SSH-Schlüssel eines Benutzers über die Web-GUI hinzugefügt werden muss. Ich suche nach einer Methode oder einem Verfahren zum Hinzufügen eines Schlüssels über eine Befehlszeilenschnittstelle oder ein bash / ansible / something-Skript.

cmosetick
quelle
1
Wie wäre es mit einer Bibliothek , um GitHubs API zu nutzen ?
Sr_

Antworten:

15

Die Authentifizierung mit Benutzername und Passwort wird von github api unterstützt :

Es gibt drei Möglichkeiten, sich über die GitHub API v3 zu authentifizieren. ...
Standardauthentifizierung
$ curl -u "Benutzername" https://api.github.com
...

Wählen Sie einfach eine Bibliothek in der Sprache, die Sie bevorzugen, und verwenden Sie die implementierte Version des API-Abschnitts " Erstellen eines öffentlichen Schlüssels ":

Erstellt einen öffentlichen Schlüssel. Erfordert, dass Sie über Basic Auth oder OAuth mit mindestens dem Gültigkeitsbereich [write: public_key] authentifiziert sind.

EINGANG
POST /user/keys

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

Wenn Sie es von der Kommandozeile aus (per Curl) verwenden möchten:

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

oder sogar ohne Passwortabfrage:

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

Hier ist ein nettes kleines Tutorial für die Verwendung von Curl zur Interaktion mit der Github-API

xx4h
quelle
Dies ist genau die Art von Informationen, die ich gesucht habe! Vielen Dank!
cmosetick
7

Ähnlich wie bei der Antwort von xx4h wird dies in Skripten zur Automatisierung neuer VM-Setups durchgeführt.

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

Es gibt Ihnen einen neuen SSH-Schlüssel, nimmt ihn in den Curl-Aufruf auf und gibt jedem auf der GitHub-Seite einen eindeutigen, aber dennoch leicht identifizierbaren Namen (z. B. würde das Ausführen jetzt DevVm_150602142247 ergeben).

nathanchere
quelle
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
quelle
0

Eine andere Möglichkeit ist die Verwendung eines API-Tokens ... Ich verwende Folgendes auf unserem internen gitLab-Server

Ausschnitt:

#!/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
quelle