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.


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


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 "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

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).


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

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

potongan:

#!/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}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.