Skip to content

Commit 36e5db5

Browse files
committed
WIP: Add agent.sh tests
1 parent 8ca026c commit 36e5db5

File tree

3 files changed

+131
-114
lines changed

3 files changed

+131
-114
lines changed

contrib/win32/openssh/bash_tests_iterator.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ try
186186

187187
# These are the known failed testcases.
188188
# transfer.sh, rekey.sh tests fail on CygWin v3.4.0, but succeeds with v3.3.6
189-
$known_failed_testcases = @("agent.sh", "key-options.sh", "forward-control.sh", "integrity.sh", "krl.sh", "cert-hostkey.sh", "cert-userkey.sh", "percent.sh", "transfer.sh", "rekey.sh")
189+
$known_failed_testcases = @("key-options.sh", "forward-control.sh", "integrity.sh", "krl.sh", "cert-hostkey.sh", "cert-userkey.sh", "percent.sh", "transfer.sh", "rekey.sh")
190190
$known_failed_testcases_skipped = @()
191191

192192
$start_time = (Get-Date)

regress/agent.sh

Lines changed: 120 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ ${SSHKEYGEN} -q -N '' -t ed25519 -f $OBJ/user_ca_key \
3939
trace "overwrite authorized keys"
4040
printf '' > $OBJ/authorized_keys_$USER
4141

42+
if [ "$os" == "windows" ]; then
43+
# We are adding the default ssh-rsa key to the agent. Certificate based key don't
44+
# seem to be currently working.
45+
cat $OBJ/ssh-rsa.pub >> $OBJ/authorized_keys_$USER
46+
${SSHADD} $OBJ/ssh-rsa > /dev/null 2>&1
47+
fi
48+
4249
for t in ${SSH_KEYTYPES}; do
4350
# generate user key for agent
4451
rm -f $OBJ/$t-agent $OBJ/$t-agent.pub*
@@ -90,6 +97,7 @@ if [ $r -ne 52 ]; then
9097
fail "ssh connect with failed (exit code $r)"
9198
fi
9299

100+
if [ "$os" != "windows" ]; then
93101
for t in ${SSH_KEYTYPES}; do
94102
trace "connect via agent using $t key"
95103
if [ "$t" = "ssh-dss" ]; then
@@ -103,130 +111,134 @@ for t in ${SSH_KEYTYPES}; do
103111
fail "ssh connect with failed (exit code $r)"
104112
fi
105113
done
114+
fi
106115

107116
trace "agent forwarding"
108117
${SSH} -A -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1
109118
r=$?
110119
if [ $r -ne 0 ]; then
111120
fail "ssh-add -l via agent fwd failed (exit code $r)"
112121
fi
113-
${SSH} "-oForwardAgent=$SSH_AUTH_SOCK" -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1
114-
r=$?
115-
if [ $r -ne 0 ]; then
116-
fail "ssh-add -l via agent path fwd failed (exit code $r)"
117-
fi
118-
${SSH} -A -F $OBJ/ssh_proxy somehost \
119-
"${SSH} -F $OBJ/ssh_proxy somehost exit 52"
120-
r=$?
121-
if [ $r -ne 52 ]; then
122-
fail "agent fwd failed (exit code $r)"
123-
fi
124-
125-
trace "agent forwarding different agent"
126-
${SSH} "-oForwardAgent=$FW_SSH_AUTH_SOCK" -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1
127-
r=$?
128-
if [ $r -ne 0 ]; then
129-
fail "ssh-add -l via agent path fwd of different agent failed (exit code $r)"
130-
fi
131-
${SSH} '-oForwardAgent=$FW_SSH_AUTH_SOCK' -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1
132-
r=$?
133-
if [ $r -ne 0 ]; then
134-
fail "ssh-add -l via agent path env fwd of different agent failed (exit code $r)"
135-
fi
136-
137-
# Remove keys from forwarded agent, ssh-add on remote machine should now fail.
138-
SSH_AUTH_SOCK=$FW_SSH_AUTH_SOCK ${SSHADD} -D > /dev/null 2>&1
139-
r=$?
140-
if [ $r -ne 0 ]; then
141-
fail "ssh-add -D failed: exit code $r"
142-
fi
143-
${SSH} '-oForwardAgent=$FW_SSH_AUTH_SOCK' -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1
144-
r=$?
145-
if [ $r -ne 1 ]; then
146-
fail "ssh-add -l with different agent did not fail with exit code 1 (exit code $r)"
147-
fi
148122

149-
(printf 'cert-authority,principals="estragon" '; cat $OBJ/user_ca_key.pub) \
150-
> $OBJ/authorized_keys_$USER
151-
for t in ${SSH_KEYTYPES}; do
152-
if [ "$t" != "ssh-dss" ]; then
153-
trace "connect via agent using $t key"
154-
${SSH} -F $OBJ/ssh_proxy -i $OBJ/$t-agent.pub \
155-
-oCertificateFile=$OBJ/$t-agent-cert.pub \
156-
-oIdentitiesOnly=yes somehost exit 52
123+
if [ "$os" != "windows" ]; then
124+
${SSH} "-oForwardAgent=$SSH_AUTH_SOCK" -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1
125+
r=$?
126+
if [ $r -ne 0 ]; then
127+
fail "ssh-add -l via agent path fwd failed (exit code $r)"
128+
fi
129+
${SSH} -A -F $OBJ/ssh_proxy somehost \
130+
"${SSH} -F $OBJ/ssh_proxy somehost exit 52"
157131
r=$?
158132
if [ $r -ne 52 ]; then
159-
fail "ssh connect with failed (exit code $r)"
133+
fail "agent fwd failed (exit code $r)"
160134
fi
161-
fi
162-
done
163135

164-
## Deletion tests.
136+
trace "agent forwarding different agent"
137+
${SSH} "-oForwardAgent=$FW_SSH_AUTH_SOCK" -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1
138+
r=$?
139+
if [ $r -ne 0 ]; then
140+
fail "ssh-add -l via agent path fwd of different agent failed (exit code $r)"
141+
fi
142+
${SSH} '-oForwardAgent=$FW_SSH_AUTH_SOCK' -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1
143+
r=$?
144+
if [ $r -ne 0 ]; then
145+
fail "ssh-add -l via agent path env fwd of different agent failed (exit code $r)"
146+
fi
165147

166-
trace "delete all agent keys"
167-
${SSHADD} -D > /dev/null 2>&1
168-
r=$?
169-
if [ $r -ne 0 ]; then
170-
fail "ssh-add -D failed: exit code $r"
171-
fi
172-
# make sure they're gone
173-
${SSHADD} -l > /dev/null 2>&1
174-
r=$?
175-
if [ $r -ne 1 ]; then
176-
fail "ssh-add -l returned unexpected exit code: $r"
177-
fi
178-
trace "readd keys"
179-
# re-add keys/certs to agent
180-
for t in ${SSH_KEYTYPES}; do
181-
${SSHADD} $OBJ/$t-agent-private >/dev/null 2>&1 || \
182-
fail "ssh-add failed exit code $?"
183-
done
184-
# make sure they are there
185-
${SSHADD} -l > /dev/null 2>&1
186-
r=$?
187-
if [ $r -ne 0 ]; then
188-
fail "ssh-add -l failed: exit code $r"
189-
fi
148+
# Remove keys from forwarded agent, ssh-add on remote machine should now fail.
149+
SSH_AUTH_SOCK=$FW_SSH_AUTH_SOCK ${SSHADD} -D > /dev/null 2>&1
150+
r=$?
151+
if [ $r -ne 0 ]; then
152+
fail "ssh-add -D failed: exit code $r"
153+
fi
154+
${SSH} '-oForwardAgent=$FW_SSH_AUTH_SOCK' -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1
155+
r=$?
156+
if [ $r -ne 1 ]; then
157+
fail "ssh-add -l with different agent did not fail with exit code 1 (exit code $r)"
158+
fi
190159

191-
check_key_absent() {
192-
${SSHADD} -L | grep "^$1 " >/dev/null
193-
if [ $? -eq 0 ]; then
194-
fail "$1 key unexpectedly present"
160+
(printf 'cert-authority,principals="estragon" '; cat $OBJ/user_ca_key.pub) \
161+
> $OBJ/authorized_keys_$USER
162+
for t in ${SSH_KEYTYPES}; do
163+
if [ "$t" != "ssh-dss" ]; then
164+
trace "connect via agent using $t key"
165+
${SSH} -F $OBJ/ssh_proxy -i $OBJ/$t-agent.pub \
166+
-oCertificateFile=$OBJ/$t-agent-cert.pub \
167+
-oIdentitiesOnly=yes somehost exit 52
168+
r=$?
169+
if [ $r -ne 52 ]; then
170+
fail "ssh connect with failed (exit code $r)"
171+
fi
172+
fi
173+
done
174+
175+
## Deletion tests.
176+
177+
trace "delete all agent keys"
178+
${SSHADD} -D > /dev/null 2>&1
179+
r=$?
180+
if [ $r -ne 0 ]; then
181+
fail "ssh-add -D failed: exit code $r"
195182
fi
196-
}
197-
check_key_present() {
198-
${SSHADD} -L | grep "^$1 " >/dev/null
199-
if [ $? -ne 0 ]; then
200-
fail "$1 key missing from agent"
183+
# make sure they're gone
184+
${SSHADD} -l > /dev/null 2>&1
185+
r=$?
186+
if [ $r -ne 1 ]; then
187+
fail "ssh-add -l returned unexpected exit code: $r"
188+
fi
189+
trace "readd keys"
190+
# re-add keys/certs to agent
191+
for t in ${SSH_KEYTYPES}; do
192+
${SSHADD} $OBJ/$t-agent-private >/dev/null 2>&1 || \
193+
fail "ssh-add failed exit code $?"
194+
done
195+
# make sure they are there
196+
${SSHADD} -l > /dev/null 2>&1
197+
r=$?
198+
if [ $r -ne 0 ]; then
199+
fail "ssh-add -l failed: exit code $r"
201200
fi
202-
}
203-
204-
# delete the ed25519 key
205-
trace "delete single key by file"
206-
${SSHADD} -qdk $OBJ/ssh-ed25519-agent || fail "ssh-add -d ed25519 failed"
207-
check_key_absent ssh-ed25519
208-
check_key_present [email protected]
209-
# Put key/cert back.
210-
${SSHADD} $OBJ/ssh-ed25519-agent-private >/dev/null 2>&1 || \
211-
fail "ssh-add failed exit code $?"
212-
check_key_present ssh-ed25519
213-
# Delete both key and certificate.
214-
trace "delete key/cert by file"
215-
${SSHADD} -qd $OBJ/ssh-ed25519-agent || fail "ssh-add -d ed25519 failed"
216-
check_key_absent ssh-ed25519
217-
check_key_absent [email protected]
218-
# Put key/cert back.
219-
${SSHADD} $OBJ/ssh-ed25519-agent-private >/dev/null 2>&1 || \
220-
fail "ssh-add failed exit code $?"
221-
check_key_present ssh-ed25519
222-
# Delete certificate via stdin
223-
${SSHADD} -qd - < $OBJ/ssh-ed25519-agent-cert.pub || fail "ssh-add -d - failed"
224-
check_key_present ssh-ed25519
225-
check_key_absent [email protected]
226-
# Delete key via stdin
227-
${SSHADD} -qd - < $OBJ/ssh-ed25519-agent.pub || fail "ssh-add -d - failed"
228-
check_key_absent ssh-ed25519
229-
check_key_absent [email protected]
201+
202+
check_key_absent() {
203+
${SSHADD} -L | grep "^$1 " >/dev/null
204+
if [ $? -eq 0 ]; then
205+
fail "$1 key unexpectedly present"
206+
fi
207+
}
208+
check_key_present() {
209+
${SSHADD} -L | grep "^$1 " >/dev/null
210+
if [ $? -ne 0 ]; then
211+
fail "$1 key missing from agent"
212+
fi
213+
}
214+
215+
# delete the ed25519 key
216+
trace "delete single key by file"
217+
${SSHADD} -qdk $OBJ/ssh-ed25519-agent || fail "ssh-add -d ed25519 failed"
218+
check_key_absent ssh-ed25519
219+
check_key_present [email protected]
220+
# Put key/cert back.
221+
${SSHADD} $OBJ/ssh-ed25519-agent-private >/dev/null 2>&1 || \
222+
fail "ssh-add failed exit code $?"
223+
check_key_present ssh-ed25519
224+
# Delete both key and certificate.
225+
trace "delete key/cert by file"
226+
${SSHADD} -qd $OBJ/ssh-ed25519-agent || fail "ssh-add -d ed25519 failed"
227+
check_key_absent ssh-ed25519
228+
check_key_absent [email protected]
229+
# Put key/cert back.
230+
${SSHADD} $OBJ/ssh-ed25519-agent-private >/dev/null 2>&1 || \
231+
fail "ssh-add failed exit code $?"
232+
check_key_present ssh-ed25519
233+
# Delete certificate via stdin
234+
${SSHADD} -qd - < $OBJ/ssh-ed25519-agent-cert.pub || fail "ssh-add -d - failed"
235+
check_key_present ssh-ed25519
236+
check_key_absent [email protected]
237+
# Delete key via stdin
238+
${SSHADD} -qd - < $OBJ/ssh-ed25519-agent.pub || fail "ssh-add -d - failed"
239+
check_key_absent ssh-ed25519
240+
check_key_absent [email protected]
241+
fi
230242

231243
trace "kill agent"
232244
${SSHAGENT} -k > /dev/null

regress/test-exec.sh

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -633,8 +633,8 @@ Host *
633633
HostKeyAlias localhost-with-alias
634634
Port $PORT
635635
User $USER
636-
GlobalKnownHostsFile $OBJ/known_hosts
637-
UserKnownHostsFile $OBJ/known_hosts
636+
GlobalKnownHostsFile `windows_path $OBJ/known_hosts`
637+
UserKnownHostsFile `windows_path $OBJ/known_hosts`
638638
PubkeyAuthentication yes
639639
ChallengeResponseAuthentication no
640640
PasswordAuthentication no
@@ -685,6 +685,7 @@ if [ "$os" == "windows" ]; then
685685
SSH_KEYTYPES=`echo $SSH_KEYTYPES | tr -d '\r','\n'` # remove \r\n
686686
SSH_HOSTKEY_TYPES=`echo $SSH_HOSTKEY_TYPES | tr -d '\r','\n'` # remove \r\n
687687
OBJ_WIN_FORMAT=`windows_path $OBJ`
688+
SRC_WIN_FORMAT=`windows_path $SRC`
688689
first_key_type=${SSH_KEYTYPES%% *}
689690
if [ "x$USER_DOMAIN" != "x" ]; then
690691
# For domain user, create folders
@@ -733,8 +734,12 @@ for t in ${SSH_HOSTKEY_TYPES}; do
733734

734735
echo HostKey $OBJ/host.$t >> $OBJ/sshd_config
735736

736-
# don't use SUDO for proxy connect
737-
echo HostKey $OBJ/$t >> $OBJ/sshd_proxy
737+
if [ "$os" == "windows" ]; then
738+
echo HostKey `windows_path $OBJ/$t` >> $OBJ/sshd_proxy
739+
else
740+
# don't use SUDO for proxy connect
741+
echo HostKey $OBJ/$t >> $OBJ/sshd_proxy
742+
fi
738743
done
739744

740745
if [ "$os" == "windows" ]; then
@@ -804,7 +809,7 @@ fi
804809
if [ "$os" == "windows" ]; then
805810
# TODO - having SSH_SK_HELPER is causing issues. Need to find a way.
806811
# This is fine for now as we don't have FIDO enabled.
807-
echo proxycommand `windows_path ${SSHD}` -i -f $OBJ_WIN_FORMAT/sshd_proxy
812+
echo proxycommand `windows_path ${SSHD}` -i -f `windows_path $OBJ`/sshd_proxy
808813
else
809814
echo proxycommand ${SUDO} env SSH_SK_HELPER=\"$SSH_SK_HELPER\" sh ${SRC}/sshd-log-wrapper.sh ${TEST_SSHD_LOGFILE} ${SSHD} -i -f $OBJ/sshd_proxy
810815
fi

0 commit comments

Comments
 (0)