命令列方法或以程式設計方式將 ssh 金鑰新增至 github.com 使用者帳戶

命令列方法或以程式設計方式將 ssh 金鑰新增至 github.com 使用者帳戶

有沒有辦法識別 github.com 伺服器的使用者名稱和密碼,以便將 ssh 密鑰新增至 github 使用者帳戶?到目前為止,我讀到的所有內容都表明必須透過 Web GUI 新增使用者的 ssh 金鑰。我正在尋找透過命令列介面或 bash/ansible/something 腳本添加密鑰的方法或流程。

答案1

2020年更新

如中所述開發商變更,密碼驗證將在以下位置被棄用:

世界標準時間 2020 年 11 月 13 日 16:00

此外,正如 @trysis 在評論中詢問的那樣,我們需要一個 2FA 解決方案。

新方法是使用個人訪問令牌: 在此輸入影像描述

對於我們的具體範例(新增 ssh 金鑰),我們只需要寫入權限(使用寫入權限時會自動新增讀取權限): 在此輸入影像描述

更新後的指令(透過curl):

curl -H "Authorization: token YourGeneratedToken" --data '{"title":"test-key","key":"ssh-rsa AAA..."}' https://api.github.com/user/keys

當啟用 2FA 時,這也有效。


老的

使用使用者名稱和密碼進行身份驗證是由 github api 支持:

透過 GitHub API v3 進行身份驗證的方式有三種。 ....
基本驗證
$curl -u“用戶名”https://api.github.com

所以就選擇一個庫以您喜歡的語言並使用的實作版本創建公鑰「公鑰」API 部分:

創建公鑰。要求您透過基本驗證或至少具有 [write:public_key] 範圍的 OAuth 進行身份驗證。

輸入
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交互

答案2

與 xx4h 的答案類似,這就是我在自動化新虛擬機器設定的腳本中執行此操作的方法。

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

它為您提供一個新的 SSH 金鑰,將其包含在curl 呼叫中,並為 GitHub 端的每個金鑰提供一個唯一但仍易於識別的名稱(例如,現在運行將給出 DevVm_150602142247)。

答案3

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

答案4

隨著新GitHub CLI gh, 你有gh auth login+ gh ssh add

將 SSH 金鑰新增至您的 GitHub 帳戶

gh ssh-key add [<key-file>] [flags]

相關內容