命令行方法或以编程方式将 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]

相关内容