secure distcc over ssh!

JAAAAAAAAAaaaaaaaa!!!
Het is me gelukt!
Stel: Je hebt beschikking over een heel legioen Linux-dozen, die het merendeel van de tijd niks staan te doen.
Ze staan dus eigenlijk te wachten tot ze source voor je mogen compileren.
Maar hoe doe je dat veilig?
Je kunt er distcc op emergen (sowieso een goed idee!), maar dan ga je natuurlijk niet poortje 3632 openzetten, zodat de hele wereld bij je kan komen distcc-en…
Je wilt eigenlijk het liefste dat dit veilig over ssh gebeurt.

Ok.

Op je remote-doos (je thuiscomputer of je laptop) doe je het volgende:
1. Maak een dsa-sleutelpaar aan:
bash-2.05b#ssh-keygen -t dsa
Er gebeurt nu iets dergelijks:
Generating public/private dsa key pair.
Enter file in which to save the key (/jouwhomedir/.ssh/id_dsa):
/* Ok, gewoon Enter */
Enter passphrase (empty for no passphrase): /* Deze vul je in. Zorg ervoor dat-ie tenminste 18 karakters lang is! */
Enter same passphrase again:
Your identification has been saved in /jouwhomedir/.ssh/id_dsa
Your public key has been saved in /jouwhomedir/.ssh/id_dsa.pub
The key fingerprint is:
57:17:87:fb:09:76:5e:53:4f:ee:05:cf:31:8f:09:48 jouwnaam@jouwcomputer

2. Kopieer je public key naar je host (je compileer-slachtoffer):
bash-2.05b#scp ~/.ssh/id_dsa.pub jouwnaamopdehost@dehost:.ssh/id_dsa_jouwcomputernaam /* Let op: Noem hem in g*dsnaam niet id_dsa.pub */

3. Vervolgens ssh je naar je host:
bash-2.05b#ssh jouwnaamopdehost@dehost
password:
bash-2.05b#cd ~/.ssh

4. Voeg jouw public key toe aan de sleutelbos op de host:
bash-2.05b#cat id_dsa_jouwcomputernaam >> authorized_keys2

5. Als je klaar bent, haal je je broek op en verlaat je de host weer:
bash-2.05b#logout (gevolgd door Enter; haha)

6. Nu gaan we testen of-ie het heeft begrepen. Je logt wederom in op je host. Ditmaal vraagt-ie niet om een password, maar om je passphrase. Deze heeft-ie nodig om je public key te controleren.
bash-2.05b#ssh jouwnaamopdehost@dehost
Enter passphrase for key ‘/jouwhomedir/.ssh/id_dsa’:

LET OP: ALS DIT NIET LUKT, BEN JE WAARSCHIJNLIJK PRIVATE KEYS AAN HET RONDSTROOIEN GEWEEST!
Controleer de ~/.ssh/authorized_keys2 op de host en verwijder eventueel private-stuff. Verbreek eventueel verbinding met je host en ga terug naar stap 2 en denk om de “.pub“. Ik vertel het maar. Het is mij nu 1 keer gebeurd, maar ja… Het is nu ook al 02:00 (gaap).

Het lijkt nu moeilijker geworden, want in plaats van je (veel te makkelijke) password moet je nu je ingewikkelde passphrase intoetsen. Maar nu komt het: Na het intoetsen van je passphrase en het contactmaken met de host, verlaat je hem weer.
Je bent nu weer terug op je eigen computer.

7. Start eerst een agent:
bash-2.05b#eval `ssh-agent`
echo Agent pid 30176;

8. Goedzo. Nu voeren we hem je sleutel:
bash-2.05b#ssh-add ~/.ssh/id_dsa
Enter passphrase for /jouwhomedir/.ssh/id_dsa:
Identity added: /jouwhomedir/.ssh/id_dsa (/jouwhomedir/.ssh/id_dsa)

Hoera! Je agent is nu klaar voor actie.
9. Maak wederom contact met je compileer-slachtoffer:
bash-2.05b#ssh jouwnaamopdehost@dehost
Hey? Hij vraagt niet meer om een password of passphrase!?! We zijn er bijna.

10. Verlaat je host en emerge nu keychain op je eigen computer:
bash-2.05b#logout
bash-2.05b#emerge keychain

11. Vervolgens killen we de agent, die ons net zo verschikkelijk blij heeft gemaakt:
bash-2.05b#pkill ssh-agent

12. We willen nu dat het voortaan automatisch gaat. Maak op je lokale doos een .bashrc file aan
bash-2.05b#nano -w ~/.bashrc
Stop hier de volgende informatie in:
[begin ~/.bashrc]
# Handige alias om het geheugen snel te wissen:
alias kagent=”/usr/bin/keychain -k”
# Handige alias om het feest te laten beginnen:
alias agent=”/usr/bin/keychain -q ~/.ssh/id_dsa; source ~/.keychain/`hostname`-sh”
# En tot slot: Handig commando om het feest automatisch te laten beginnen:
/usr/bin/keychain -q ~/.ssh/id_dsa
source ~/.keychain/`hostname`-sh

[einde ~/.bashrc]

Dit gebeurt er (bij mij).
Ik boot standaard kde.
Als ik vanuit de GUI een bash-terminal start, vraagt mijn laptop mij de eerste keer om mijn passphrase.
Als ik die braaf intoets, kan ik vervolgens alle hosts ssh-en waarnaartoe ik mijn public keys heb geupload!
Of, nog beter: Ik kan zelfs het volgende regeltje aan mijn /etc/distcc/hosts toevoegen:
[begin /etc/distcc/hosts regeltje]
mijnnaamopdehost@dehost:/usr/bin/distccd mijnnaamopnogeenanderehost@deanderehost:/usr/bin/distccd nog.een.gewonehost_op_het_lokale_netwerk localhost
[einde /etc/distcc/hosts regeltje]

Je kunt nu vanuit je standaardterminal lekker emergen en al je beschikbare resources worden heerlijk gconsumeerd! Je moet alleen (voor straf) altijd de eerste keer nadat dat je computer geboot is, je passphrase intoetsen.
Je kunt er natuurlijk voor kiezen om dit laatste “agent”-regel uit je .bashrc weg te laten. In dat geval moet je hem handmatig intoetsen voordat je gaat emergen, anders krijg je hoofdpijn.
Ik denk echter dat het voordeel voor de stabiele desktoppers onder ons ruimschoots opweegt tegen het bezwaar om de eerste keer na de reboot je passphrase even in te kloppen, om daarna rijkelijk beloond te worden met voldoende rekenkracht om … een satelliet rond de aarde te schieten ofzo…

Blij, blij, blij! Standbeeld voor Dae!!!
Commentaar?

Zo. Dat was het X-verhaal. Zou misschien iemand mij nog willen helpen met een installatie zonder X?
Als ik op mijn niet-X-doos (daep.homelinux.org) gewoon inlog, voert-ie niet de .bashrc uit. Als ik dan handmatig bash start, komt-ie evengoed met de vraag om mijn passphrase… Kan dit niet meteen na het inloggen of, zelfs, synchroon met PAM (David)?