metode baris perintah atau secara terprogram menambahkan kunci ssh ke akun pengguna github.com

18

Apakah ada cara untuk mengidentifikasi dengan nama pengguna dan kata sandi ke server github.com untuk tujuan menambahkan kunci ssh ke akun pengguna github? Sejauh ini semua yang saya baca menunjukkan bahwa kunci ssh pengguna harus ditambahkan melalui GUI web. Saya mencari metode atau proses menambahkan kunci melalui antarmuka baris perintah atau script bash / ansible / something.

cmosetick
sumber
1
Bagaimana dengan menggunakan beberapa pustaka untuk menggunakan API GitHub ?
sr_

Jawaban:

15

Auth dengan nama pengguna dan kata sandi didukung oleh github api :

Ada tiga cara untuk mengautentikasi melalui GitHub API v3. ...
Otentikasi Dasar
$ curl -u "nama pengguna" https://api.github.com
...

Jadi pilih saja lib dalam bahasa yang Anda sukai dan gunakan versi yang diimplementasikan dari Bagian API Buat Kunci Publik "Kunci Publik":

Membuat kunci publik. Mengharuskan Anda diautentikasi melalui Auth Dasar, atau OAuth dengan setidaknya [tulis: public_key] lingkup.

MEMASUKKAN
POST /user/keys

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

Jika Anda ingin menggunakannya dari command line (via curl):

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

atau bahkan tanpa meminta kata sandi:

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

di sini adalah tutorial kecil yang menyenangkan untuk menggunakan curl untuk berinteraksi dengan API github

xx4h
sumber
Ini adalah jenis informasi yang saya cari! Terima kasih banyak!
cmosetick
7

Mirip dengan jawaban xx4h, ini adalah bagaimana saya melakukannya dalam skrip untuk mengotomatisasi pengaturan VM baru.

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

Ini memberi Anda kunci SSH baru, memasukkannya dalam panggilan ikal dan memberikan nama yang unik namun masih mudah diidentifikasi untuk masing-masing di sisi GitHub (misalnya menjalankan sekarang akan memberi DevVm_150602142247).

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

Opsi lain adalah menggunakan token API ... Saya menggunakan yang berikut ini di server gitLab internal kami

potongan:

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