phương pháp dòng lệnh hoặc lập trình thêm khóa ssh vào tài khoản người dùng github.com


18

Có cách nào để xác định tên người dùng và mật khẩu cho máy chủ github.com với mục đích thêm khóa ssh vào tài khoản người dùng github không? Cho đến nay mọi thứ tôi đã đọc đều gợi ý rằng khóa ssh của người dùng phải được thêm thông qua GUI web. Tôi đang tìm kiếm phương pháp hoặc quy trình thêm khóa thông qua giao diện dòng lệnh hoặc tập lệnh bash / ansible / gì đó.


1
Còn việc sử dụng một số thư viện để sử dụng API của GitHub thì sao?
sr_

Câu trả lời:


15

Xác thực với tên người dùng và mật khẩu được hỗ trợ bởi github api :

Có ba cách để xác thực thông qua GitHub API v3. ...
Xác thực cơ bản
$ curl -u "tên người dùng" https://api.github.com
...

Vì vậy chỉ cần chọn một lib trong ngôn ngữ bạn muốn và sử dụng phiên bản triển khai của Tạo một Public Key "Public Key" Mục API:

Tạo khóa công khai. Yêu cầu bạn được xác thực qua Basic Auth hoặc OAuth với ít nhất [write: public_key].

ĐẦU VÀO
POST /user/keys

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

Nếu bạn muốn sử dụng nó từ dòng lệnh (thông qua curl):

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

hoặc thậm chí không cần nhắc mật khẩu:

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

Đây là một hướng dẫn nhỏ tuyệt vời để sử dụng curl để tương tác với github API


Đây chính xác là loại thông tin tôi đang tìm kiếm! Cảm ơn rât nhiều!
cmosetick

7

Tương tự như câu trả lời của xx4h, đây là cách tôi thực hiện trong các tập lệnh để tự động hóa các thiết lập VM mới.

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

Nó cung cấp cho bạn một khóa SSH mới, bao gồm nó trong lệnh gọi curl và cung cấp một tên duy nhất nhưng vẫn dễ nhận dạng cho mỗi tên ở phía GitHub (ví dụ: chạy ngay bây giờ sẽ cung cấp cho 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

Một tùy chọn khác là sử dụng mã thông báo API ... Tôi sử dụng cách sau trên máy chủ gitLab nội bộ của chúng tôi

đoạn trích:

#!/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}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.