metoda wiersza poleceń lub programowo dodaj klucz ssh do konta użytkownika github.com


18

Czy istnieje sposób identyfikacji za pomocą nazwy użytkownika i hasła do serwerów github.com w celu dodania klucza ssh do konta użytkownika github? Jak dotąd wszystko, co przeczytałem, sugeruje, że klucz ssh użytkownika musi zostać dodany za pośrednictwem internetowego interfejsu GUI. Szukam metody lub procesu dodawania klucza za pomocą interfejsu wiersza poleceń lub skryptu bash / ansible / coś.


1
Co powiesz na użycie biblioteki do korzystania z interfejsu API GitHub ?
sr_

Odpowiedzi:


15

Autoryzacja z nazwą użytkownika i hasłem jest obsługiwana przez github api :

Istnieją trzy sposoby uwierzytelnienia za pomocą GitHub API v3. ...
Podstawowe uwierzytelnianie
$ curl -u „nazwa użytkownika” https://api.github.com
...

Więc po prostu wybrać lib w języku wolisz używać i wdrożony wersję utworzyć klucz publiczny „klucz publiczny” API sekcji:

Tworzy klucz publiczny. Wymaga uwierzytelnienia za pomocą uwierzytelniania podstawowego lub OAuth z co najmniej zakresem [write: public_key].

WEJŚCIE
POST /user/keys

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

Jeśli chcesz go używać z wiersza poleceń (przez curl):

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

lub nawet bez pytania o hasło:

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

tutaj jest ładny mały samouczek dotyczący używania curl do interakcji z github API


Właśnie tego rodzaju informacji szukałem! Dziękuję Ci bardzo!
cmosetick

7

Podobnie jak w odpowiedzi xx4h, tak to robię w skryptach automatyzujących nowe konfiguracje maszyn wirtualnych.

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

Daje ci nowy klucz SSH, włącza go w wywołanie curl i daje unikalną, ale wciąż łatwą do zidentyfikowania nazwę dla każdego po stronie GitHub (np. Uruchomienie teraz dałoby 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

Inną opcją jest użycie tokena API ... Używam następujących na naszym wewnętrznym serwerze gitLab

skrawek:

#!/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}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.