コマンドライン方式またはプログラムで github.com ユーザーアカウントに SSH キーを追加する

コマンドライン方式またはプログラムで github.com ユーザーアカウントに SSH キーを追加する

github ユーザー アカウントに SSH キーを追加する目的で、github.com サーバーにユーザー名とパスワードでアクセスする方法はありますか? これまで読んだ情報はすべて、ユーザーの SSH キーは Web GUI 経由で追加する必要があることを示唆しています。コマンド ライン インターフェイスまたは bash/ansible/何かのスクリプト経由でキーを追加する方法またはプロセスを探しています。

答え1

2020年アップデート

前述の通り開発者の変更パスワード認証は次の時点で廃止される予定です:

2020年11月13日 16:00 UTC

さらに、@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 で認証する方法は 3 つあります。...
基本認証
$ curl -u "username"https://api.github.com
...

これだけライブラリを選択お好みの言語で、実装されたバージョンを使用してください公開鍵を作成する「公開鍵」APIセクション:

公開鍵を作成します。Basic Auth または少なくとも [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 の回答と同様に、これは新しい VM セットアップを自動化するためのスクリプトで実行する方法です。

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

GitHubアカウントにSSHキーを追加する

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

関連情報