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ś.

cmosetick
źródło
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

xx4h
źródło
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 "[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

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).

nathanchere
źródło
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="[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}
Darren Dwyer
źródło
0

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

skrawek:

#!/bin/bash

myemail="[email protected]"

# 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="[email protected]: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}
Lars
źródło