# $OpenBSD: knownhosts-command.sh,v 1.3 2021/08/30 01:15:45 djm Exp $ # Placed in the Public Domain. tid="known hosts command " rm -f $OBJ/knownhosts_command $OBJ/ssh_proxy_khc cp $OBJ/ssh_proxy $OBJ/ssh_proxy_orig ( grep -vi GlobalKnownHostsFile $OBJ/ssh_proxy_orig | \ grep -vi UserKnownHostsFile; echo "GlobalKnownHostsFile none" ; echo "UserKnownHostsFile none" ; echo "KnownHostsCommand $OBJ/knownhosts_command '%t' '%K' '%u'" ; ) > $OBJ/ssh_proxy verbose "simple connection" cat > $OBJ/knownhosts_command << _EOF #!/bin/sh cat $OBJ/known_hosts _EOF chmod a+x $OBJ/knownhosts_command ${SSH} -F $OBJ/ssh_proxy x true || fail "ssh connect failed" verbose "no keys" cat > $OBJ/knownhosts_command << _EOF #!/bin/sh exit 0 _EOF chmod a+x $OBJ/knownhosts_command ${SSH} -F $OBJ/ssh_proxy x true && fail "ssh connect succeeded with no keys" verbose "bad exit status" cat > $OBJ/knownhosts_command << _EOF #!/bin/sh cat $OBJ/known_hosts exit 1 _EOF chmod a+x $OBJ/knownhosts_command ${SSH} -F $OBJ/ssh_proxy x true && fail "ssh connect succeeded with bad exit" for keytype in ${SSH_HOSTKEY_TYPES} ; do algs=$keytype test "x$keytype" = "xssh-dss" && continue test "x$keytype" = "xssh-rsa" && algs=ssh-rsa,rsa-sha2-256,rsa-sha2-512 verbose "keytype $keytype" cat > $OBJ/knownhosts_command << _EOF #!/bin/sh die() { echo "\$@" 1>&2 ; exit 1; } test "x\$1" = "x$keytype" || die "wrong keytype \$1 (expected $keytype)" test "x\$3" = "x$LOGNAME" || die "wrong username \$3 (expected $LOGNAME)" grep -- "\$1.*\$2" $OBJ/known_hosts _EOF ${SSH} -F $OBJ/ssh_proxy -oHostKeyAlgorithms=$algs x true || fail "ssh connect failed for keytype $x" done