
Some checks failed
CIFuzz / Fuzzing (push) Waiting to run
C/C++ CI self-hosted / win10 cygwin-release (push) Waiting to run
C/C++ CI self-hosted / ARM default (push) Waiting to run
C/C++ CI self-hosted / ARM64 default (push) Waiting to run
C/C++ CI self-hosted / alpine default (push) Waiting to run
C/C++ CI self-hosted / centos7 default (push) Waiting to run
C/C++ CI self-hosted / debian-i386 default (push) Waiting to run
C/C++ CI self-hosted / dfly30 default (push) Waiting to run
C/C++ CI self-hosted / dfly48 default (push) Waiting to run
C/C++ CI self-hosted / dfly60 default (push) Waiting to run
C/C++ CI self-hosted / dfly62 default (push) Waiting to run
C/C++ CI self-hosted / dfly64 default (push) Waiting to run
C/C++ CI self-hosted / fbsd10 default (push) Waiting to run
C/C++ CI self-hosted / fbsd12 default (push) Waiting to run
C/C++ CI self-hosted / fbsd13 default (push) Waiting to run
C/C++ CI self-hosted / fbsd14 default (push) Waiting to run
C/C++ CI self-hosted / nbsd10 default (push) Waiting to run
C/C++ CI self-hosted / nbsd3 default (push) Waiting to run
C/C++ CI self-hosted / nbsd4 default (push) Waiting to run
C/C++ CI self-hosted / nbsd8 default (push) Waiting to run
C/C++ CI self-hosted / nbsd9 default (push) Waiting to run
C/C++ CI self-hosted / obsd51 default (push) Waiting to run
C/C++ CI self-hosted / obsd67 default (push) Waiting to run
C/C++ CI self-hosted / obsd72 default (push) Waiting to run
C/C++ CI self-hosted / obsd73 default (push) Waiting to run
C/C++ CI self-hosted / obsd74 default (push) Waiting to run
C/C++ CI self-hosted / obsdsnap default (push) Waiting to run
C/C++ CI self-hosted / obsdsnap-i386 default (push) Waiting to run
C/C++ CI self-hosted / omnios default (push) Waiting to run
C/C++ CI self-hosted / openindiana default (push) Waiting to run
C/C++ CI self-hosted / ubuntu-2204 default (push) Waiting to run
C/C++ CI self-hosted / obsd-arm64 default (push) Waiting to run
C/C++ CI self-hosted / aix51 default (push) Waiting to run
C/C++ CI self-hosted / fbsd14-ppc64 default (push) Waiting to run
C/C++ CI self-hosted / sol10 default (push) Waiting to run
C/C++ CI self-hosted / sol11 default (push) Waiting to run
C/C++ CI self-hosted / win10 default (push) Waiting to run
C/C++ CI self-hosted / debian-riscv64 default (push) Waiting to run
C/C++ CI self-hosted / openwrt-mips default (push) Waiting to run
C/C++ CI self-hosted / openwrt-mipsel default (push) Waiting to run
C/C++ CI self-hosted / ARM64 pam (push) Waiting to run
C/C++ CI self-hosted / centos7 pam (push) Waiting to run
C/C++ CI self-hosted / debian-i386 pam (push) Waiting to run
C/C++ CI self-hosted / dfly48 pam (push) Waiting to run
C/C++ CI self-hosted / dfly58 pam (push) Waiting to run
C/C++ CI self-hosted / dfly60 pam (push) Waiting to run
C/C++ CI self-hosted / dfly62 pam (push) Waiting to run
C/C++ CI self-hosted / dfly64 pam (push) Waiting to run
C/C++ CI self-hosted / fbsd10 pam (push) Waiting to run
C/C++ CI self-hosted / fbsd12 pam (push) Waiting to run
C/C++ CI self-hosted / fbsd13 pam (push) Waiting to run
C/C++ CI self-hosted / fbsd14 pam (push) Waiting to run
C/C++ CI self-hosted / nbsd10 pam (push) Waiting to run
C/C++ CI self-hosted / nbsd8 pam (push) Waiting to run
C/C++ CI self-hosted / nbsd9 pam (push) Waiting to run
C/C++ CI self-hosted / omnios pam (push) Waiting to run
C/C++ CI self-hosted / openindiana pam (push) Waiting to run
C/C++ CI self-hosted / sol10 pam (push) Waiting to run
C/C++ CI self-hosted / sol11 pam-krb5 (push) Waiting to run
C/C++ CI self-hosted / sol11 sol64 (push) Waiting to run
C/C++ CI self-hosted / dfly30 without-openssl (push) Waiting to run
C/C++ CI / ubuntu-latest aws-lc (push) Failing after 31s
C/C++ CI / ubuntu-latest boringssl (push) Failing after 31s
C/C++ CI / ubuntu-latest clang-15 (push) Failing after 31s
C/C++ CI / ubuntu-latest clang-19 (push) Failing after 19s
C/C++ CI / ubuntu-latest default (push) Failing after 3s
C/C++ CI / ubuntu-latest gcc-14 (push) Failing after 4s
C/C++ CI / ubuntu-latest libressl-3.2.6 (push) Failing after 4s
C/C++ CI / ubuntu-latest libressl-3.3.6 (push) Failing after 3s
C/C++ CI / ubuntu-latest libressl-3.4.3 (push) Failing after 3s
C/C++ CI / ubuntu-latest libressl-3.5.3 (push) Failing after 4s
C/C++ CI / ubuntu-latest libressl-3.6.1 (push) Failing after 4s
C/C++ CI / ubuntu-latest libressl-3.7.2 (push) Failing after 4s
C/C++ CI / ubuntu-latest libressl-3.8.4 (push) Failing after 3s
C/C++ CI / ubuntu-latest libressl-3.9.2 (push) Failing after 3s
C/C++ CI / ubuntu-latest libressl-4.0.0 (push) Failing after 4s
C/C++ CI / ubuntu-latest libressl-master (push) Failing after 4s
C/C++ CI / ubuntu-latest musl (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-1.1.1 (push) Failing after 4s
C/C++ CI / ubuntu-latest openssl-1.1.1_stable (push) Failing after 4s
C/C++ CI / ubuntu-latest openssl-1.1.1t (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-1.1.1w (push) Failing after 4s
C/C++ CI / ubuntu-latest openssl-3.0 (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-3.0.0 (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-3.0.15 (push) Failing after 4s
C/C++ CI / ubuntu-latest openssl-3.1 (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-3.1.0 (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-3.1.7 (push) Failing after 4s
C/C++ CI / ubuntu-latest openssl-3.2 (push) Failing after 4s
C/C++ CI / ubuntu-latest openssl-3.2.3 (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-3.3 (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-3.3.2 (push) Failing after 4s
C/C++ CI / ubuntu-latest openssl-3.4.0 (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-master (push) Failing after 3s
C/C++ CI / ubuntu-latest openssl-noec (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-0.71 (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-0.72 (push) Failing after 3s
C/C++ CI / ubuntu-latest putty-0.73 (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-0.74 (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-0.75 (push) Failing after 3s
C/C++ CI / ubuntu-latest putty-0.76 (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-0.77 (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-0.78 (push) Failing after 3s
C/C++ CI / ubuntu-latest putty-0.79 (push) Failing after 3s
C/C++ CI / ubuntu-latest putty-0.80 (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-0.81 (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-0.82 (push) Failing after 3s
C/C++ CI / ubuntu-latest putty-0.83 (push) Failing after 4s
C/C++ CI / ubuntu-latest putty-snapshot (push) Failing after 4s
C/C++ CI / ubuntu-latest tcmalloc (push) Failing after 3s
C/C++ CI / ubuntu-latest zlib-develop (push) Failing after 3s
C/C++ CI / ubuntu-22.04 c89 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 clang-11 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 clang-12-Werror (push) Has been cancelled
C/C++ CI / ubuntu-22.04 clang-14 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 clang-sanitize-address (push) Has been cancelled
C/C++ CI / ubuntu-22.04 clang-sanitize-undefined (push) Has been cancelled
C/C++ CI / windows-2019 cygwin-release (push) Has been cancelled
C/C++ CI / windows-2022 cygwin-release (push) Has been cancelled
C/C++ CI / macos-13 default (push) Has been cancelled
C/C++ CI / macos-14 default (push) Has been cancelled
C/C++ CI / macos-15 default (push) Has been cancelled
C/C++ CI / ubuntu-22.04 default (push) Has been cancelled
C/C++ CI / ubuntu-22.04-arm default (push) Has been cancelled
C/C++ CI / ubuntu-24.04-arm default (push) Has been cancelled
C/C++ CI / windows-2019 default (push) Has been cancelled
C/C++ CI / windows-2022 default (push) Has been cancelled
C/C++ CI / ubuntu-22.04 gcc-11-Werror (push) Has been cancelled
C/C++ CI / ubuntu-22.04 gcc-12-Werror (push) Has been cancelled
C/C++ CI / ubuntu-22.04 gcc-9 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 gcc-sanitize-address (push) Has been cancelled
C/C++ CI / ubuntu-22.04 gcc-sanitize-undefined (push) Has been cancelled
C/C++ CI / ubuntu-22.04 hardenedmalloc (push) Has been cancelled
C/C++ CI / ubuntu-22.04 heimdal (push) Has been cancelled
C/C++ CI / ubuntu-22.04 kitchensink (push) Has been cancelled
C/C++ CI / ubuntu-22.04-arm kitchensink (push) Has been cancelled
C/C++ CI / ubuntu-24.04-arm kitchensink (push) Has been cancelled
C/C++ CI / ubuntu-22.04 krb5 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 libedit (push) Has been cancelled
C/C++ CI / macos-13 pam (push) Has been cancelled
C/C++ CI / macos-14 pam (push) Has been cancelled
C/C++ CI / macos-15 pam (push) Has been cancelled
C/C++ CI / ubuntu-22.04 pam (push) Has been cancelled
C/C++ CI / ubuntu-22.04 selinux (push) Has been cancelled
C/C++ CI / ubuntu-22.04 sk (push) Has been cancelled
C/C++ CI / ubuntu-22.04 valgrind-1 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 valgrind-2 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 valgrind-3 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 valgrind-4 (push) Has been cancelled
C/C++ CI / ubuntu-22.04 valgrind-unit (push) Has been cancelled
C/C++ CI / ubuntu-22.04 without-openssl (push) Has been cancelled
194 lines
5.6 KiB
Bash
194 lines
5.6 KiB
Bash
# $OpenBSD: agent-pkcs11-restrict.sh,v 1.1 2023/12/18 14:49:39 djm Exp $
|
|
# Placed in the Public Domain.
|
|
|
|
tid="pkcs11 agent constraint test"
|
|
|
|
p11_setup || skip "No PKCS#11 library found"
|
|
|
|
rm -f $SSH_AUTH_SOCK $OBJ/agent.log $OBJ/host_[abcx]* $OBJ/user_[abcx]*
|
|
rm -f $OBJ/sshd_proxy_host* $OBJ/ssh_output* $OBJ/expect_*
|
|
rm -f $OBJ/ssh_proxy[._]* $OBJ/command $OBJ/authorized_keys_*
|
|
|
|
trace "generate host keys"
|
|
for h in a b x ca ; do
|
|
$SSHKEYGEN -q -t ed25519 -C host_$h -N '' -f $OBJ/host_$h || \
|
|
fatal "ssh-keygen hostkey failed"
|
|
done
|
|
|
|
# XXX test CA hostcerts too.
|
|
|
|
key_for() {
|
|
case $h in
|
|
a) K="${SSH_SOFTHSM_DIR}/RSA.pub" ;;
|
|
b) K="${SSH_SOFTHSM_DIR}/EC.pub" ;;
|
|
*) K="" ;;
|
|
esac
|
|
export K
|
|
}
|
|
|
|
SSH_AUTH_SOCK="$OBJ/agent.sock"
|
|
export SSH_AUTH_SOCK
|
|
rm -f $SSH_AUTH_SOCK
|
|
trace "start agent"
|
|
${SSHAGENT} ${EXTRA_AGENT_ARGS} -d -a $SSH_AUTH_SOCK > $OBJ/agent.log 2>&1 &
|
|
AGENT_PID=$!
|
|
trap "kill $AGENT_PID" EXIT
|
|
for x in 0 1 2 3 4 ; do
|
|
# Give it a chance to start
|
|
${SSHADD} -l > /dev/null 2>&1
|
|
r=$?
|
|
test $r -eq 1 && break
|
|
sleep 1
|
|
done
|
|
if [ $r -ne 1 ]; then
|
|
fatal "ssh-add -l did not fail with exit code 1 (got $r)"
|
|
fi
|
|
|
|
# XXX a lot of this is a copy of agent-restrict.sh, but I couldn't see a nice
|
|
# way to factor it out -djm
|
|
|
|
trace "prepare client config"
|
|
egrep -vi '(identityfile|hostname|hostkeyalias|proxycommand)' \
|
|
$OBJ/ssh_proxy > $OBJ/ssh_proxy.bak
|
|
cat << _EOF > $OBJ/ssh_proxy
|
|
IdentitiesOnly yes
|
|
ForwardAgent yes
|
|
ExitOnForwardFailure yes
|
|
_EOF
|
|
cp $OBJ/ssh_proxy $OBJ/ssh_proxy_noid
|
|
for h in a b ; do
|
|
key_for $h
|
|
cat << _EOF >> $OBJ/ssh_proxy
|
|
Host host_$h
|
|
Hostname host_$h
|
|
HostkeyAlias host_$h
|
|
IdentityFile $K
|
|
ProxyCommand ${SUDO} env SSH_SK_HELPER=\"$SSH_SK_HELPER\" ${OBJ}/sshd-log-wrapper.sh -i -f $OBJ/sshd_proxy_host_$h
|
|
_EOF
|
|
# Variant with no specified keys.
|
|
cat << _EOF >> $OBJ/ssh_proxy_noid
|
|
Host host_$h
|
|
Hostname host_$h
|
|
HostkeyAlias host_$h
|
|
ProxyCommand ${SUDO} env SSH_SK_HELPER=\"$SSH_SK_HELPER\" ${OBJ}/sshd-log-wrapper.sh -i -f $OBJ/sshd_proxy_host_$h
|
|
_EOF
|
|
done
|
|
cat $OBJ/ssh_proxy.bak >> $OBJ/ssh_proxy
|
|
cat $OBJ/ssh_proxy.bak >> $OBJ/ssh_proxy_noid
|
|
|
|
LC_ALL=C
|
|
export LC_ALL
|
|
echo "SetEnv LC_ALL=${LC_ALL}" >> sshd_proxy
|
|
|
|
trace "prepare known_hosts"
|
|
rm -f $OBJ/known_hosts
|
|
for h in a b x ; do
|
|
(printf "host_$h " ; cat $OBJ/host_${h}.pub) >> $OBJ/known_hosts
|
|
done
|
|
|
|
trace "prepare server configs"
|
|
egrep -vi '(hostkey|pidfile)' $OBJ/sshd_proxy \
|
|
> $OBJ/sshd_proxy.bak
|
|
for h in a b ; do
|
|
cp $OBJ/sshd_proxy.bak $OBJ/sshd_proxy_host_$h
|
|
cat << _EOF >> $OBJ/sshd_proxy_host_$h
|
|
ExposeAuthInfo yes
|
|
Hostkey $OBJ/host_$h
|
|
_EOF
|
|
cp $OBJ/sshd_proxy_host_$h $OBJ/sshd_proxy_host_${h}.bak
|
|
done
|
|
|
|
trace "prepare authorized_keys"
|
|
cat >> $OBJ/command << EOF
|
|
#!/bin/sh
|
|
echo USERAUTH
|
|
cat \$SSH_USER_AUTH
|
|
echo AGENT
|
|
if $SSHADD -ql >/dev/null 2>&1 ; then
|
|
$SSHADD -L | cut -d' ' -f1-2 | sort
|
|
else
|
|
echo NONE
|
|
fi
|
|
EOF
|
|
chmod a+x $OBJ/command
|
|
>$OBJ/authorized_keys_$USER
|
|
for h in a b ; do
|
|
key_for $h
|
|
(printf "%s" "restrict,agent-forwarding,command=\"$OBJ/command\" ";
|
|
cat $K) >> $OBJ/authorized_keys_$USER
|
|
done
|
|
|
|
trace "unrestricted keys"
|
|
$SSHADD -qD >/dev/null || fatal "clear agent failed"
|
|
p11_ssh_add -qs ${TEST_SSH_PKCS11} ||
|
|
fatal "failed to add keys"
|
|
for h in a b ; do
|
|
key_for $h
|
|
echo USERAUTH > $OBJ/expect_$h
|
|
printf "publickey " >> $OBJ/expect_$h
|
|
cat $K >> $OBJ/expect_$h
|
|
echo AGENT >> $OBJ/expect_$h
|
|
$SSHADD -L | cut -d' ' -f1-2 | sort >> $OBJ/expect_$h
|
|
${SSH} -F $OBJ/ssh_proxy -oIdentityFile=$K \
|
|
host_$h true > $OBJ/ssh_output || fatal "test ssh $h failed"
|
|
cmp $OBJ/expect_$h $OBJ/ssh_output || fatal "unexpected output"
|
|
done
|
|
|
|
trace "restricted to different host"
|
|
$SSHADD -qD >/dev/null || fatal "clear agent failed"
|
|
p11_ssh_add -q -h host_x -s ${TEST_SSH_PKCS11} -H $OBJ/known_hosts ||
|
|
fatal "failed to add keys"
|
|
for h in a b ; do
|
|
key_for $h
|
|
${SSH} -F $OBJ/ssh_proxy -oIdentityFile=$K \
|
|
host_$h true > $OBJ/ssh_output && fatal "test ssh $h succeeded"
|
|
done
|
|
|
|
trace "restricted to destination host"
|
|
$SSHADD -qD >/dev/null || fatal "clear agent failed"
|
|
p11_ssh_add -q -h host_a -h host_b -s ${TEST_SSH_PKCS11} -H $OBJ/known_hosts ||
|
|
fatal "failed to add keys"
|
|
for h in a b ; do
|
|
key_for $h
|
|
echo USERAUTH > $OBJ/expect_$h
|
|
printf "publickey " >> $OBJ/expect_$h
|
|
cat $K >> $OBJ/expect_$h
|
|
echo AGENT >> $OBJ/expect_$h
|
|
echo NONE >> $OBJ/expect_$h
|
|
${SSH} -F $OBJ/ssh_proxy -oIdentityFile=$K \
|
|
host_$h true > $OBJ/ssh_output || fatal "test ssh $h failed"
|
|
cmp $OBJ/expect_$h $OBJ/ssh_output || fatal "unexpected output"
|
|
done
|
|
|
|
trace "restricted multihop"
|
|
$SSHADD -qD >/dev/null || fatal "clear agent failed"
|
|
p11_ssh_add -q -h host_a -h "host_a>host_b" \
|
|
-s ${TEST_SSH_PKCS11} -H $OBJ/known_hosts || fatal "failed to add keys"
|
|
key_for a
|
|
AK=$K
|
|
key_for b
|
|
BK=$K
|
|
# Prepare authorized_keys file to additionally ssh to host_b
|
|
_command="echo LOCAL ; ${OBJ}/command ; echo REMOTE; ${SSH} -AF $OBJ/ssh_proxy -oIdentityFile=$BK host_b"
|
|
(printf "%s" "restrict,agent-forwarding,command=\"$_command\" ";
|
|
cat $BK) > $OBJ/authorized_keys_a
|
|
grep -vi AuthorizedKeysFile $OBJ/sshd_proxy_host_a.bak > $OBJ/sshd_proxy_host_a
|
|
echo "AuthorizedKeysFile $OBJ/authorized_keys_a" >> $OBJ/sshd_proxy_host_a
|
|
# Prepare expected output from both hosts.
|
|
echo LOCAL > $OBJ/expect_a
|
|
echo USERAUTH >> $OBJ/expect_a
|
|
printf "publickey " >> $OBJ/expect_a
|
|
cat $AK >> $OBJ/expect_a
|
|
echo AGENT >> $OBJ/expect_a
|
|
$SSHADD -L | cut -d' ' -f1-2 | sort >> $OBJ/expect_a
|
|
echo REMOTE >> $OBJ/expect_a
|
|
echo USERAUTH >> $OBJ/expect_a
|
|
printf "publickey " >> $OBJ/expect_a
|
|
cat $BK >> $OBJ/expect_a
|
|
echo AGENT >> $OBJ/expect_a
|
|
echo NONE >> $OBJ/expect_a
|
|
${SSH} -AF $OBJ/ssh_proxy -oIdentityFile=$AK \
|
|
host_a whatever > $OBJ/ssh_output || fatal "test ssh $h failed"
|
|
cmp $OBJ/expect_a $OBJ/ssh_output || fatal "unexpected output"
|
|
|