]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - crypto/openssh/regress/agent.sh
ssh: Update to OpenSSH 9.3p1
[FreeBSD/FreeBSD.git] / crypto / openssh / regress / agent.sh
1 #       $OpenBSD: agent.sh,v 1.21 2023/03/01 09:29:32 dtucker Exp $
2 #       Placed in the Public Domain.
3
4 tid="simple agent test"
5
6 SSH_AUTH_SOCK=/nonexistent ${SSHADD} -l > /dev/null 2>&1
7 if [ $? -ne 2 ]; then
8         fail "ssh-add -l did not fail with exit code 2"
9 fi
10
11 trace "start agent, args ${EXTRA_AGENT_ARGS} -s"
12 eval `${SSHAGENT} ${EXTRA_AGENT_ARGS} -s` >`ssh_logfile ssh-agent`
13 r=$?
14 if [ $r -ne 0 ]; then
15         fatal "could not start ssh-agent: exit code $r"
16 fi
17
18 eval `${SSHAGENT} ${EXTRA_AGENT_ARGS} -s | sed 's/SSH_/FW_SSH_/g'` > /dev/null
19 r=$?
20 if [ $r -ne 0 ]; then
21         fatal "could not start second ssh-agent: exit code $r"
22 fi
23
24 ${SSHADD} -l > /dev/null 2>&1
25 if [ $? -ne 1 ]; then
26         fail "ssh-add -l did not fail with exit code 1"
27 fi
28
29 rm -f $OBJ/user_ca_key $OBJ/user_ca_key.pub
30 ${SSHKEYGEN} -q -N '' -t ed25519 -f $OBJ/user_ca_key \
31         || fatal "ssh-keygen failed"
32
33 trace "overwrite authorized keys"
34 printf '' > $OBJ/authorized_keys_$USER
35
36 for t in ${SSH_KEYTYPES}; do
37         # generate user key for agent
38         rm -f $OBJ/$t-agent $OBJ/$t-agent.pub*
39         ${SSHKEYGEN} -q -N '' -t $t -f $OBJ/$t-agent ||\
40                  fatal "ssh-keygen for $t-agent failed"
41         # Make a certificate for each too.
42         ${SSHKEYGEN} -qs $OBJ/user_ca_key -I "$t cert" \
43                 -n estragon $OBJ/$t-agent.pub || fatal "ca sign failed"
44
45         # add to authorized keys
46         cat $OBJ/$t-agent.pub >> $OBJ/authorized_keys_$USER
47         # add private key to agent
48         ${SSHADD} $OBJ/$t-agent > /dev/null 2>&1
49         if [ $? -ne 0 ]; then
50                 fail "ssh-add failed exit code $?"
51         fi
52         # add private key to second agent
53         SSH_AUTH_SOCK=$FW_SSH_AUTH_SOCK ${SSHADD} $OBJ/$t-agent > /dev/null 2>&1
54         if [ $? -ne 0 ]; then
55                 fail "ssh-add failed exit code $?"
56         fi
57         # Move private key to ensure that we aren't accidentally using it.
58         # Keep the corresponding public keys/certs around for later use.
59         mv -f $OBJ/$t-agent $OBJ/$t-agent-private
60         cp -f $OBJ/$t-agent.pub $OBJ/$t-agent-private.pub
61         cp -f $OBJ/$t-agent-cert.pub $OBJ/$t-agent-private-cert.pub
62 done
63
64 # Remove explicit identity directives from ssh_proxy
65 mv $OBJ/ssh_proxy $OBJ/ssh_proxy_bak
66 grep -vi identityfile $OBJ/ssh_proxy_bak > $OBJ/ssh_proxy
67
68 ${SSHADD} -l > /dev/null 2>&1
69 r=$?
70 if [ $r -ne 0 ]; then
71         fail "ssh-add -l failed: exit code $r"
72 fi
73 # the same for full pubkey output
74 ${SSHADD} -L > /dev/null 2>&1
75 r=$?
76 if [ $r -ne 0 ]; then
77         fail "ssh-add -L failed: exit code $r"
78 fi
79
80 trace "simple connect via agent"
81 ${SSH} -F $OBJ/ssh_proxy somehost exit 52
82 r=$?
83 if [ $r -ne 52 ]; then
84         fail "ssh connect with failed (exit code $r)"
85 fi
86
87 for t in ${SSH_KEYTYPES}; do
88         trace "connect via agent using $t key"
89         if [ "$t" = "ssh-dss" ]; then
90                 echo "PubkeyAcceptedAlgorithms +ssh-dss" >> $OBJ/ssh_proxy
91                 echo "PubkeyAcceptedAlgorithms +ssh-dss" >> $OBJ/sshd_proxy
92         fi
93         ${SSH} -F $OBJ/ssh_proxy -i $OBJ/$t-agent.pub -oIdentitiesOnly=yes \
94                 somehost exit 52
95         r=$?
96         if [ $r -ne 52 ]; then
97                 fail "ssh connect with failed (exit code $r)"
98         fi
99 done
100
101 trace "agent forwarding"
102 ${SSH} -A -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1
103 r=$?
104 if [ $r -ne 0 ]; then
105         fail "ssh-add -l via agent fwd failed (exit code $r)"
106 fi
107 ${SSH} "-oForwardAgent=$SSH_AUTH_SOCK" -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1
108 r=$?
109 if [ $r -ne 0 ]; then
110         fail "ssh-add -l via agent path fwd failed (exit code $r)"
111 fi
112 ${SSH} -A -F $OBJ/ssh_proxy somehost \
113         "${SSH} -F $OBJ/ssh_proxy somehost exit 52"
114 r=$?
115 if [ $r -ne 52 ]; then
116         fail "agent fwd failed (exit code $r)"
117 fi
118
119 trace "agent forwarding different agent"
120 ${SSH} "-oForwardAgent=$FW_SSH_AUTH_SOCK" -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1
121 r=$?
122 if [ $r -ne 0 ]; then
123         fail "ssh-add -l via agent path fwd of different agent failed (exit code $r)"
124 fi
125 ${SSH} '-oForwardAgent=$FW_SSH_AUTH_SOCK' -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1
126 r=$?
127 if [ $r -ne 0 ]; then
128         fail "ssh-add -l via agent path env fwd of different agent failed (exit code $r)"
129 fi
130
131 # Remove keys from forwarded agent, ssh-add on remote machine should now fail.
132 SSH_AUTH_SOCK=$FW_SSH_AUTH_SOCK ${SSHADD} -D > /dev/null 2>&1
133 r=$?
134 if [ $r -ne 0 ]; then
135         fail "ssh-add -D failed: exit code $r"
136 fi
137 ${SSH} '-oForwardAgent=$FW_SSH_AUTH_SOCK' -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1
138 r=$?
139 if [ $r -ne 1 ]; then
140         fail "ssh-add -l with different agent did not fail with exit code 1 (exit code $r)"
141 fi
142
143 (printf 'cert-authority,principals="estragon" '; cat $OBJ/user_ca_key.pub) \
144         > $OBJ/authorized_keys_$USER
145 for t in ${SSH_KEYTYPES}; do
146     if [ "$t" != "ssh-dss" ]; then
147         trace "connect via agent using $t key"
148         ${SSH} -F $OBJ/ssh_proxy -i $OBJ/$t-agent.pub \
149                 -oCertificateFile=$OBJ/$t-agent-cert.pub \
150                 -oIdentitiesOnly=yes somehost exit 52
151         r=$?
152         if [ $r -ne 52 ]; then
153                 fail "ssh connect with failed (exit code $r)"
154         fi
155     fi
156 done
157
158 ## Deletion tests.
159
160 trace "delete all agent keys"
161 ${SSHADD} -D > /dev/null 2>&1
162 r=$?
163 if [ $r -ne 0 ]; then
164         fail "ssh-add -D failed: exit code $r"
165 fi
166 # make sure they're gone
167 ${SSHADD} -l > /dev/null 2>&1
168 r=$?
169 if [ $r -ne 1 ]; then
170         fail "ssh-add -l returned unexpected exit code: $r"
171 fi
172 trace "readd keys"
173 # re-add keys/certs to agent
174 for t in ${SSH_KEYTYPES}; do
175         ${SSHADD} $OBJ/$t-agent-private >/dev/null 2>&1 || \
176                 fail "ssh-add failed exit code $?"
177 done
178 # make sure they are there
179 ${SSHADD} -l > /dev/null 2>&1
180 r=$?
181 if [ $r -ne 0 ]; then
182         fail "ssh-add -l failed: exit code $r"
183 fi
184
185 check_key_absent() {
186         ${SSHADD} -L | grep "^$1 " >/dev/null
187         if [ $? -eq 0 ]; then
188                 fail "$1 key unexpectedly present"
189         fi
190 }
191 check_key_present() {
192         ${SSHADD} -L | grep "^$1 " >/dev/null
193         if [ $? -ne 0 ]; then
194                 fail "$1 key missing from agent"
195         fi
196 }
197
198 # delete the ed25519 key
199 trace "delete single key by file"
200 ${SSHADD} -qdk $OBJ/ssh-ed25519-agent || fail "ssh-add -d ed25519 failed"
201 check_key_absent ssh-ed25519
202 check_key_present ssh-ed25519-cert-v01@openssh.com
203 # Put key/cert back.
204 ${SSHADD} $OBJ/ssh-ed25519-agent-private >/dev/null 2>&1 || \
205         fail "ssh-add failed exit code $?"
206 check_key_present ssh-ed25519
207 # Delete both key and certificate.
208 trace "delete key/cert by file"
209 ${SSHADD} -qd $OBJ/ssh-ed25519-agent || fail "ssh-add -d ed25519 failed"
210 check_key_absent ssh-ed25519
211 check_key_absent ssh-ed25519-cert-v01@openssh.com
212 # Put key/cert back.
213 ${SSHADD} $OBJ/ssh-ed25519-agent-private >/dev/null 2>&1 || \
214         fail "ssh-add failed exit code $?"
215 check_key_present ssh-ed25519
216 # Delete certificate via stdin
217 ${SSHADD} -qd - < $OBJ/ssh-ed25519-agent-cert.pub || fail "ssh-add -d - failed"
218 check_key_present ssh-ed25519
219 check_key_absent ssh-ed25519-cert-v01@openssh.com
220 # Delete key via stdin
221 ${SSHADD} -qd - < $OBJ/ssh-ed25519-agent.pub || fail "ssh-add -d - failed"
222 check_key_absent ssh-ed25519
223 check_key_absent ssh-ed25519-cert-v01@openssh.com
224
225 trace "kill agent"
226 ${SSHAGENT} -k > /dev/null
227 SSH_AGENT_PID=$FW_SSH_AGENT_PID ${SSHAGENT} -k > /dev/null