Juhiseid, kuidas ID-Kaardiga logida SSH kaudu sisse on kirjutatud juba 2011 aastast. Kirjutan natuke oma tähelepanekutest 2019 aastal ning ka sellest, kuidas kasutada ID Kaarti Windowsis Puttyga.
Smartcardi kasutamine võimaldab SSH ligipääsu erinevatest masinatest nii, et ei pea hakkama igas masinas võtmeid genereerima või masinate vahel võtmeid kopeerima. ID Kaart peaks olema enamustel Eestlastel olemas olema, seega hea võimalus on seda ära kasutada.
openssh-client versioon 8+
open-eid ehk Eesti ID kaardi tarkvara
Openssh 8 on Ubuntus saadaval alates versioonist 19.10. Openssh peab olema versioon 8 (või uuem), kuna ver 7 (ja vanemad) ei toeta ECDSA võtmeid PKCS11 liidese kaudu.
open-eid ID kaardi kasutamiseks on vajalik alla laadida opensc-pkcs11 tarkvara. 26.10.2019 seisuga ei toeta opensc (versioon 0.19) uute IDEMIA ID kaartide pkcs11 liidest. Eesti ID kaardi tarkvara repodest on saadaval opensc versioon, millele on juurde lisatud idemia tugi. Lihtsaim variant on paigaldada kogu ID kaardi tarkvara , aga võib ka lisada käsitsi repo ja paigaldada ainult opensc-pkcs11 paketi.
Legendid räägivad, et opensc 0.20 toetab ka IDEMIA pkcs11 kaarte, aga hetkel seda proovinud ei ole. Kui see tõesti ka nii on, siis pole ID kaardi tarkvara otseselt vajalik.
Võtme lugemiseks ja kaardi hilisemaks kasutamiseks on vaja ainult ssh -le öelda, et ta kasutaks OpenSC-d.
ssh-keygen -D onepin-opensc-pkcs11.so
Faili salvestamiseks
ssh-keygen -D onepin-opensc-pkcs11.so > id.pub
Avalik võti tuleb kopeerida masinatesse samamoodi, nagu tavalise ssh võtme puhul.
Sarnaselt nagu võtme lugemisel, tuleb SSHle öelda, et ta kasutaks OpenSC-d.
ssh -I onepin-opensc-pkcs11.so [email protected]
Selleks et ei peaks seda iga kord sisetama, võib selle lisada SSH config faili.
echo "PKCS11Provider onepin-opensc-pkcs11.so" >> .ssh/config
Variant 1 puhul küsitakse iga autentimise puhul PIN koodi. Selleks et seda vältida võib kasutada variant 2-te.
NB! Antud meetod ei tööta osade klaviatuuride sisseehitatud ID kaardi lugejatega. Täpsemalt nende klaviatuuridega, mille lugejatel on pinpad tugi. Nende klaviatuuridega töötab variant 2.
Variant 2 puhul tuleb ka eemaldada ssh config failist Variant 1 rida PKCS11Provider onepin-opensc-pkcs11.so
kuna muidu ikka küsitakse iga kord PINi.
Variant 2 puhul salvestatakse PIN kood ssh-add abil mällu, mis tähendab et seda ei pea iga kord sisestama.
Antud meetodiga on vajalik anda ette täispikk asukoht pkcs11 teegile.
ssh-add -s /usr/lib/x86_64-linux-gnu/onepin-opensc-pkcs11.so
Kaardi eemaldamine agendist
ssh-add -e /usr/lib/x86_64-linux-gnu/onepin-opensc-pkcs11.so
NB kui vahepeal ID Kaart lugejast eemaldada, tuleb selleks kaart agendist eemaldada ja uuesti lisada. Selle jaoks võib luua väikse skripti käsuga:
sudo cat << EOF > /tmp/add-id-card-ssh
#!/bin/bash
ssh-add -e /usr/lib/x86_64-linux-gnu/onepin-opensc-pkcs11.so 2>/dev/null 1>/dev>
ssh-add -s /usr/lib/x86_64-linux-gnu/onepin-opensc-pkcs11.so
EOF
sudo chmod +x /tmp/add-id-card-ssh
sudo mv /tmp/add-id-card-ssh /usr/local/bin/
ja edaspidi jooksutada käsku add-id-card-ssh
Selleks et ei peaks mõtlema, kas vahepeal sai ID kaart välja võetud või mitte, saab kogu protsessi veidi automaagiliseks teha. Sisuliselt, on vaja seda, et enne SSH käivitamist kontrollitaks, kas kaart on sisestatud, ning kas see on ssh agenti lisatud. Kirjutasin selleks mõned bashi funktsioonid.
Esiteks on vaja aptist juurde tõmmata pakk pcsc-tools
.
Teiseks on vaja lisada .bashrc
faili järgnevad read.
id-card-inserted(){
#The card can have many different names depending on the Card version,
#library versions and even the card status.
grep -e "id.ee" -e "EstEID" -e "Estonian Identity Card" <(timeout 0.1 pcsc_scan) --quiet
return "$?"
}
id-card-added(){
timeout 0.1 ssh-add -T <(ssh-add -L | grep pkcs11) 2>/dev/null 1>/dev/null
card_added="$?"
#Code 124 means that the command timeouted and was probably going to succeed.
#If the command failed, then it would not timeout and exit immidiately
if [ "$card_added" -eq 124 ]; then return 0
else return 1; fi
}
remove-id-card(){
ssh-add -e /usr/lib/x86_64-linux-gnu/onepin-opensc-pkcs11.so 2>/dev/null 1>/dev/null
}
add-id-card(){
remove-id-card
echo -n "ID Card PIN1 - "
ssh-add -s /usr/lib/x86_64-linux-gnu/onepin-opensc-pkcs11.so
}
check-id-card(){
if ! id-card-inserted; then remove-id-card; return 1; fi
if ! id-card-added; then add-id-card; fi
}
alias ssh="check-id-card; ssh"
Ettepanekud kuidas probleemi mõistlikumalt lahendada on teretulnud.
Putty CAC
Eesti ID kaardi tarkvara
Putty CAC on Putty eriversioon, millele on juurde lisatud smartcardide tugi. Vaja läheb putty.exet ja pageant.exet, aga mõistlik oleks paigaldada kogu pakk (.msi installer)
ID Kaardi tarkvara on vajalik, kuna see sisaldab vajaminevaid draivereid kaardiga suhtlemiseks.
Kui tarkvara on paigaldatud, siis esimese asjana tuleb käima panna Pageant.
Seejärel tuleb pageant lahti teha.
Kaardi lisamiseks pageantisse tuleb valida Add PKCS Cert
ning seejärel valida draiver, mis kaarti lugema hakkab.
NB! Enne 2019 väljastatud ID Kaartide puhul tuleb valida onepin-opensc-pkcs11.dll
ning uute ID Kaartide puhul tuleb valida OcsPKCS11Wrapper.dll
Kui see on tehtud, siis kaardi avalikku võtit saab kopeerida, kui valida nimekirjast soovitud võti ja vajutada Copy to Clipboard
Selleks, et kaarti ei peaks iga kord uuesti lisama, oleks mõistlik valida pageantist Autoload certs
. Nii lisab Pageant käivitamisel automaatselt varasemalt lisatud kaardid.
Putty kasutamine erineb tavalisest vaid selle võrra, et sisselogimise hetkel küsitakse ID Kaardi PIN koodi (PIN 1).
Kas seda "variant 3" automaagiat ei saa udev'iga teha?