Метод командной строки или программное добавление ssh-ключа к учетной записи пользователя github.com

Метод командной строки или программное добавление ssh-ключа к учетной записи пользователя github.com

Есть ли способ идентифицироваться с помощью имени пользователя и пароля на серверах github.com для добавления ключа ssh в учетную запись пользователя github? Пока что все, что я читал, предполагает, что ключ ssh пользователя должен быть добавлен через веб-интерфейс. Я ищу метод или процесс добавления ключа через интерфейс командной строки или же скрипт bash/ansible/что-то еще.

решение1

Обновление 2020 г.

Как указано визменения разработчика, Аутентификация по паролю будет прекращена в:

13 ноября 2020 г. в 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

Это также работает при включенной двухфакторной аутентификации.


СТАРЫЙ

Авторизация с именем пользователя и паролемподдерживается API github:

Существует три способа аутентификации через GitHub API v3. ...
Базовая аутентификация
$ curl -u "username"https://api.github.com
...

Так что простовыбрать библиотекуна предпочитаемом вами языке и используйте реализованную версиюСоздать открытый ключРаздел API «Открытый ключ»:

Создает открытый ключ. Требует, чтобы вы были аутентифицированы с помощью Basic Auth или OAuth с областью действия не менее [write:public_key].

ВХОД
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 для взаимодействия с API github

решение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]

Связанный контент