ssh-agent a “automatické” zadání hesla (pam_ssh)

Předpokládám, že SSH znáte všichni, většina z vás asi bude vědět i o programu ssh-agent. Pokud používáte hesla na své SSH klíče, tak vás určitě nebaví při každém přihlášení ke vzdálené mašině znova a znova ťukat heslo. Spousta lidí to “vyřešila” tak, že prostě u SSH klíče to heslo zrušili. Lepší řešení je použít program ssh-agent.

Tento program způsobí to, že heslo zadáte pouze jednou a potom to pro uživatele vypadá jako by se používal klíč bez hesla. Na notebooku, na kterém většinou pracuji, jsem se dřív přihlašoval do textu, přimountoval zašifrovaný disk a pak spustil Xka. V ~/.xinitrc jsem míval něco takovéhleho:

export SSH_ASKPASS=ssh-askpass
eval `ssh-agent -s`
ssh-add < /dev/null

Nedávno jsem notebook přeinstaloval a zrušil šifrovaný HDD, proto jsem začal bootovat do grafického režimu, konkrétně používám gdm. V novém systému mi tak nějak scházel program ssh-askpass, ale za to je součástí pam_ssh. Používám pro ssh klíč stejné heslo jako do systému, proto jsem se rozhodl ho využít.

Modul pam_ssh umí jednu prima věc, při jeho použití se automaticky nastartuje ssh-agent a načte klíč už během přihlašování do systému, takže nemusím heslo vypisovat znovu po náběhu windowmakera.

Následující postup je platný pro Fedoru 5, pro ostatní distribuce si ho zřemě budete muset trochu přiohnout.

Vytvořte soubor /etc/pam.d/system-auth-ssh:

auth        required      pam_env.so
auth        sufficient    pam_ssh.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so

session     required      pam_limits.so
session     optional      pam_ssh.so
session     required      pam_unix.so

vytvořte soubor /etc/pam.d/gdm-ssh:

auth       required     pam_env.so
auth       include      system-auth-ssh
account    required     pam_nologin.so
account    include      system-auth-ssh
password   include      system-auth-ssh
session    include      system-auth-ssh
session    required     pam_loginuid.so
session    optional     pam_console.so

Dalším krokem je přejmenování souboru /etc/pam.d/gdm na něco jiného a vytvoření symlinku:

ln -s /etc/pam.d/gdm-ssh /etc/pam.d/gdm

Při použití pam_ssh se změní výzva na zadání hesla v dialogu gdm (nebo pokud upravíte soubor /etc/pam.d/login tak i v textové konzoli) na SSH passphrase:.

Pokud vám něco nefunguje, tak se kokněte do logů jestli to tam nezvrací nějaké chyby.