Git: Deploy Key für Github Repo erstellen

Github erlaubt das Hinterlegen von Deploy Keys, um sich die Eingabe von Username und Password zu ersparen. Allerdings müssen die Keys unique sein. Ein Key, der zB an den User gebunden ist (~/.ssh/id_rsa.pub) kann nicht auch noch Deploy Key für ein Repository sein.

Das kann man umgehen, indem man einen Key mit einer Fake-Domain für Github anlegt (simple-budget.github.com). In der ~/.ssh/config wird dann der Fake-Host wieder dem korrekten Host (github.com) zugeordnet.

Szenario:
Wir haben als User „medianetix“ ein Github-Repo „simple-budget“ unter „github.com/medianetix/simple-budget“.
Zu diesem wollen wir jetzt einen (neuen) Deploy-Key anlegen.

Zuerst wird der remote angezeigt:

git remote -v

Damit wird der origin für fetch und pull angezeigt.

Danach ändern wir den remote origin, was einfacher ist, als ihn zu löschen und neu anzulegen.
(hier: simple-budget.github.com für das Repo github.com/medianetix/simple-budget):

git remote set-url origin git@simple-budget.github.com:medianetix/simple-budget.git 
git remote -v

Beispiel-Ausgabe für unseren Fall:
origin git@simple-budget.github.com:medianetix/simple-budget.git (fetch)
origin git@simple-budget.github.com:medianetix/simple-budget.git (push)

Nun wird der neue SSH-Key lokal erzeugt:

ssh-keygen -t rsa -f ~/.ssh/id_rsa_simple-budget -C https://github.com/medianetix/simple-budget

Danach den Public-Key „~/.ssh/id_rsa_simple-budget.pub“ bei Github als Deploy-Key für das Repo hinterlegen (Settings > Deploy Key).

Jetzt muss noch im ~/.ssh/config der Fake-Host eingetragen werden:

Host simple-budget.github.com
    Hostname github.com
    IdentityFile ~/.ssh/id_rsa_simple-budget

Bitte beachten, dass beim „IdentityFile“ id_rsa_simple-budget (private key) und nicht id_rsa_simple-budget.pub (public key) angegeben wurde.

Testen des Keys mit:

ssh -T git@simple-budget.github.com

Als Antwort erhalten wir im Erfolgfall den Hinweis, dass wir erfolgreich authentifiziert wurden aber bei Github keinen Shell-Access bekommen.

Hi medianetix/simple-budget! You’ve successfully authenticated, but GitHub does not provide shell access.