ABSTRACT: umgang mit ssh RSA schluesseln wird erklaert. AUDIENCE: advanced users SYSTEM: any unix SECTION: basic unix commands AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt wir haben bei der diskussion ueber ssh schon gelernt: einlogen mit passwoertern ist nicht unbedingt immer ideal. abgesehen davon dass das passwort am rechner von dem aus man ssh aufruft abgehoert werden kann koennte das passwort am zielrechner mitgelogged werden... d.h. man muesste idealerweise ein passwort fuer jeden rechner haben. manchmal will man auch scripts schreiben die automatisch auf einem anderen rechner einlogen koennen.. damit die authomatisiert ablaufen koennen darf sollen sie aber nicht nach einem passwort fragen.. und dann will man unter umstaenden einschraenken was solche scripts tun duerfen... gnau fuer problem dieser art hat ssh passende loesungen: anstatt mit passwort kann man mit einem RSA schluessel einlogen. hat man noch keinen solchen schluessel kann man sich einen anlegen: ssh-keygen erzeugt eine paar an schluesseln im verzeichnis .ssh/ mit dem namen identity und identity.pub beim erzeuegen wird man nach einer passphrase gefragt. die kann praktisch beliebig lang sein (nicht nur 8 zeichen wie bei einem passwort) und sollte auch etwas laenger sein. identity ist jetzt der eigen (geheime) schluessel. identity.pub ist eine beschreibung dieses schluessel die man wenn noetig auch veroeffentlichen koennte. (identiy ist ein binaeres file - nicht mit einem text editor lesbar). identity.pub koennte z.b. so aussehen: 1024 35 1212807801....viele zahlen in einer zeile....6213233 maxmeier@irgendwo damit man jetzt mit dem eigenen schluessel wo anders ohne passwort einlogen kann muss man diesen schluessel am anderen rechner in das file: .ssh/authorized_keys eintragen. und zwar obiges file genau in eine zeile schreiben (keinesfalls umbrechen) (das file muss dem user gehoeren der einlogen koennen soll und sollte nur fuer diesen lesbar sein) jetzt kann man vom rechner aus wo man sein identity file hat auf den anderen rechner aus ohne passwort einlogen. (man muss natuerlich die passphrase angeben. aber die wird nicht an den anderen rechner uebermittelt.) fuer automatisiert ablaufende logins muss man natuerlich die passphrase leer lassen. will man oefter einlogen ist das dauernde eingeben der passphrase natuerlich muehsam. ebenfalls fuer ein script... hier kann man ssh-agent nutzen: ssh-agent bash wuerde eine bash shell aufmachen die unerhalb des ssh-agent laueft. in dieser shell kann man dann: ssh-add seinen key an den agent weitergeben. (beim ersten mal das passwort angeben). danach kann man in dierser shell (oder was immer sonst es fuer ein programm war dass man mit ssh-agent aufgerufen hat) den key verwenden ohne die passphrase nochmals eintippen zu muessen. manche distributionen starten den X11 windowmanger unter ssh-agent. damit kann man dann in all seinen shells und xterms den schluessel benuezten nachdem man in einem davon ssh-add gemacht hat. da der geheime teil des schluessels nicht uebers netzt transportiert wird und aus dem oeffentlichen teil nicht errechnet werden kann (vorausgesetzt die NSA hat nicht mathematiker im sold die cleverer sind als der rest der welt..) so spricht auch nichts dagegen die identity zum einlogen auf mehreren computern zu verwenden. will man dennoch verschiedene identitys haben so kann man mit: ssh-keygen -f blablaschluessel einen schluessel ins file blablaschluessel und blablaschluessel.pub erzeugen. mit ssh -i blablaschluessel ... kann man dann den schluessel verwenden.. oder mit ssh-add blablaschluesse den schluessel zum agent uebermitteln. nun ist es zwar sehr praktisch dass man mit den schluesseln (wenn man keine passphrase setzt) z.b. ein automatisiertes backup eines rechners machen kann.. oder aehnliches... nur braucht das backup meist root und meist will man nicht einen schluessel der einem auf einem root werden laesst irgendwo herumliegen haben... noch dazu nicht einmal mit passphrase geschuetzt... dazu kann man die befehle die ein bestimmter key ausfuehren darf einschraenken: dazu fuegt man im autorized_keys file for dem entsprechenden schluessel folgendes an: command="/etc/mybackupscript.sh",no-pty,no-port-forwarding 1024 35 123321123... das bewirk dass jedesmal wenn jemand mit diesem key einloggt er automatisch diesen befehl (hier z.b.: /etc/mybackupscript.sh ) ausfuehrt und sonst nichts (man kann einen anderen befehl beim ssh client angeben... ausgefuehrt wird trozdem immer der eingetragene) no-pty bewikt dass kein terminal fuer die verbindung aufgemacht wird und no-port-forwarding bewirkt dass alle portfowarding anfragen (-R bzw -L switche im ssh client) ignoriert werden. mit: from="10.11.12.13" 1024 35 1341234534... koennte man einschraenken dass ein bestimter key nur von einer bestimmten IP (bzw mit wildcards - siehe manpage) auch von mehreren IPs aus.. EXERCISES: * diskutiere die sicherheitsvor und nachteile der RSA authentisierung gegenueber ssh mit passwort authentisierung. * leg' dir eine identity zu :-) (mit passphrase) * mach die notwendigen eintrage um mit dieser identiy auf einem anderen rechner ohne passwortabfrage einlogen zu koennen. (wenn du gerade keinen anderen rechner hast. kannst du einen anderen account am eigenen rechner zum testen verwenden) * verwende ssh-add und ssh-agent um die passphrase nur einmal eingeben zu muessen und damit oefter einlogen zu koennen. * erzeug dir einen schluessel namens blakey dem du auf einem anderen rechner nur ein einziges kommando ausfuehren darf (z.b. "date" oder "hostname" oder ein kleines script dass date, hostname und uname -a ausfuehrt oder aehnliches) REFERENCES: man sshd man ssh man ssh-agent man ssh-add man ssh-keygen