วิธีบรรทัดคำสั่งหรือโดยทางโปรแกรมเพิ่มคีย์ ssh ไปยังบัญชีผู้ใช้ github.com


18

มีวิธีในการระบุด้วยชื่อผู้ใช้และรหัสผ่านไปยังเซิร์ฟเวอร์ github.com เพื่อเพิ่มคีย์ ssh ให้กับบัญชีผู้ใช้ github หรือไม่? จนถึงทุกสิ่งที่ฉันได้อ่านแสดงให้เห็นว่าต้องเพิ่มคีย์ ssh ของผู้ใช้ผ่านทางเว็บ GUI ฉันกำลังมองหาวิธีการหรือกระบวนการในการเพิ่มคีย์ผ่านอินเตอร์เฟสบรรทัดคำสั่งหรืออื่น ๆ สคริปต์ทุบตี / ansible / something


1
วิธีการเกี่ยวกับการใช้ห้องสมุดบางอย่างเพื่อใช้API ของ GitHub ?
sr_

คำตอบ:


15

รับรองความถูกต้องด้วยชื่อผู้ใช้และรหัสผ่านได้รับการสนับสนุนโดย github api :

มีสามวิธีในการตรวจสอบสิทธิ์ผ่าน GitHub API v3 ... การ
รับรองความถูกต้องเบื้องต้น
$ curl -u "ชื่อผู้ใช้" https://api.github.com
...

ดังนั้นเพียงเลือก libในภาษาที่คุณต้องการและใช้ส่วน API สร้าง "คีย์สาธารณะ" คีย์สาธารณะที่สร้างแล้ว :

สร้างรหัสสาธารณะ ต้องการให้คุณได้รับการรับรองความถูกต้องผ่าน Basic Auth หรือ OAuth ที่มีอย่างน้อย [write: public_key]

INPUT
POST /user/keys

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

หากคุณต้องการใช้จากบรรทัดคำสั่ง (ผ่านทาง curl):

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

หรือแม้กระทั่งโดยไม่ต้องใส่รหัสผ่าน:

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

นี่คือบทแนะนำเล็ก ๆ น้อย ๆ ที่ดีสำหรับการใช้ curl เพื่อโต้ตอบกับ github API


นี่คือข้อมูลที่ฉันต้องการ! ขอบคุณมาก!
cmosetick

7

คล้ายกับคำตอบของ xx4h นี่คือวิธีที่ฉันทำในสคริปต์สำหรับการตั้งค่า 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

มันมอบคีย์ SSH ใหม่ให้คุณรวมไว้ในการโทร curl และให้ชื่อที่ไม่ซ้ำกัน แต่ยังคงระบุได้ง่ายสำหรับแต่ละคนในด้าน GitHub (เช่นการทำงานในขณะนี้จะให้ 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

ตัวเลือกอื่นคือใช้โทเค็น API ... ฉันใช้สิ่งต่อไปนี้บนเซิร์ฟเวอร์ gitLab ภายในของเรา

ข้อมูลโค้ด:

#!/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}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.