1# $OpenBSD: agent-pkcs11.sh,v 1.1 2010/02/08 10:52:47 markus Exp $ 2# Placed in the Public Domain. 3 4tid="pkcs11 agent test" 5 6TEST_SSH_PIN="" 7TEST_SSH_PKCS11=/usr/local/lib/soft-pkcs11.so.0.0 8 9# setup environment for soft-pkcs11 token 10SOFTPKCS11RC=$OBJ/pkcs11.info 11export SOFTPKCS11RC 12# prevent ssh-agent from calling ssh-askpass 13SSH_ASKPASS=/usr/bin/true 14export SSH_ASKPASS 15unset DISPLAY 16 17# start command w/o tty, so ssh-add accepts pin from stdin 18notty() { 19 perl -e 'use POSIX; POSIX::setsid(); 20 if (fork) { wait; exit($? >> 8); } else { exec(@ARGV) }' "$@" 21} 22 23trace "start agent" 24eval `${SSHAGENT} -s` > /dev/null 25r=$? 26if [ $r -ne 0 ]; then 27 fail "could not start ssh-agent: exit code $r" 28else 29 trace "generating key/cert" 30 rm -f $OBJ/pkcs11.key $OBJ/pkcs11.crt 31 openssl genrsa -out $OBJ/pkcs11.key 2048 > /dev/null 2>&1 32 chmod 600 $OBJ/pkcs11.key 33 openssl req -key $OBJ/pkcs11.key -new -x509 \ 34 -out $OBJ/pkcs11.crt -text -subj '/CN=pkcs11 test' > /dev/null 35 printf "a\ta\t$OBJ/pkcs11.crt\t$OBJ/pkcs11.key" > $SOFTPKCS11RC 36 # add to authorized keys 37 ${SSHKEYGEN} -y -f $OBJ/pkcs11.key > $OBJ/authorized_keys_$USER 38 39 trace "add pkcs11 key to agent" 40 echo ${TEST_SSH_PIN} | notty ${SSHADD} -s ${TEST_SSH_PKCS11} > /dev/null 2>&1 41 r=$? 42 if [ $r -ne 0 ]; then 43 fail "ssh-add -s failed: exit code $r" 44 fi 45 46 trace "pkcs11 list via agent" 47 ${SSHADD} -l > /dev/null 2>&1 48 r=$? 49 if [ $r -ne 0 ]; then 50 fail "ssh-add -l failed: exit code $r" 51 fi 52 53 trace "pkcs11 connect via agent" 54 ${SSH} -2 -F $OBJ/ssh_proxy somehost exit 5 55 r=$? 56 if [ $r -ne 5 ]; then 57 fail "ssh connect failed (exit code $r)" 58 fi 59 60 trace "remove pkcs11 keys" 61 echo ${TEST_SSH_PIN} | notty ${SSHADD} -e ${TEST_SSH_PKCS11} > /dev/null 2>&1 62 r=$? 63 if [ $r -ne 0 ]; then 64 fail "ssh-add -e failed: exit code $r" 65 fi 66 67 trace "kill agent" 68 ${SSHAGENT} -k > /dev/null 69fi 70