komut satırı yöntemi veya programlı olarak ssh anahtarını github.com kullanıcı hesabına ekleyin


18

Github kullanıcı hesabına bir ssh anahtarı eklemek amacıyla github.com sunucularına bir kullanıcı adı ve parola ile tanımlamanın bir yolu var mı? Şimdiye kadar okuduğum her şey, bir kullanıcının ssh anahtarının web GUI aracılığıyla eklenmesi gerektiğini gösteriyor. Ben bir komut satırı arayüzü veya başka bir bash / ansible / bir şey komut dosyası aracılığıyla bir anahtar ekleme işlemi veya yöntem arıyorum.


1
GitHub'ın API'sını kullanmak için bazı kütüphaneleri kullanmaya ne dersiniz ?
sr_

Yanıtlar:


15

Kullanıcı adı ve şifre ile yetki, github api tarafından desteklenir :

GitHub API v3 ile kimlik doğrulamanın üç yolu vardır. ...
Temel Kimlik Doğrulama
$ curl -u "kullanıcı adı" https://api.github.com
...

Bu nedenle, yalnızca tercih ettiğiniz dilde bir lib seçin ve Ortak Anahtar Oluştur "Genel Anahtar" API Bölümünün uygulanmış sürümünü kullanın :

Ortak bir anahtar oluşturur. Temel Kimlik Doğrulama veya en az [write: public_key] kapsamıyla OAuth aracılığıyla kimlik doğrulamanız gerekir.

GİRİŞ
POST /user/keys

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

Komut satırından kullanmak istiyorsanız (curl ile):

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

hatta şifre sormadan:

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

İşte github API ile etkileşimde curl kullanmak için güzel bir küçük öğretici


Bu tam da aradığım bilgi! Çok teşekkür ederim!
cmosetick

7

Xx4h'ün cevabına benzer şekilde, yeni VM kurulumlarını otomatikleştirmek için komut dosyalarında bu şekilde yapıyorum.

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

Size yeni bir SSH anahtarı verir, kıvrılma çağrısına ekler ve GitHub tarafındaki her biri için benzersiz ama yine de kolayca tanımlanabilir bir ad verir (örneğin, şimdi çalıştırmak DevVm_150602142247 verir).


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

Başka bir seçenek bir API belirteci kullanmaktır ... Dahili gitLab sunucumuzda aşağıdakileri kullanıyorum

ön bilgi:

#!/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}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.