xref: /freebsd/crypto/openssh/regress/ssh-com-client.sh (revision 644b4646c7acab87dc20d4e5dd53d2d9da152989)
1#	$OpenBSD: ssh-com-client.sh,v 1.8 2025/05/06 06:05:48 djm Exp $
2#	Placed in the Public Domain.
3
4tid="connect with ssh.com client"
5
6#TEST_COMBASE=/path/to/ssh/com/binaries
7if [ "X${TEST_COMBASE}" = "X" ]; then
8	fatal '$TEST_COMBASE is not set'
9fi
10
11VERSIONS="
12	2.1.0
13	2.2.0
14	2.3.0
15	2.3.1
16	2.4.0
17	3.0.0
18	3.1.0
19	3.2.0
20	3.2.2
21	3.2.3
22	3.2.5
23	3.2.9
24	3.2.9.1
25	3.3.0"
26
27# 2.0.10 2.0.12 2.0.13 don't like the test setup
28
29# setup authorized keys
30SRC=`dirname ${SCRIPT}`
31cp ${SRC}/rsa_ssh2.prv ${OBJ}/id.com
32chmod 600 ${OBJ}/id.com
33${SSHKEYGEN} -i -f ${OBJ}/id.com	> $OBJ/id.openssh
34chmod 600 ${OBJ}/id.openssh
35${SSHKEYGEN} -y -f ${OBJ}/id.openssh	> $OBJ/authorized_keys_$USER
36${SSHKEYGEN} -e -f ${OBJ}/id.openssh	> $OBJ/id.com.pub
37echo IdKey ${OBJ}/id.com > ${OBJ}/id.list
38
39# we need a RSA host key
40t=rsa
41rm -f                             ${OBJ}/$t ${OBJ}/$t.pub
42${SSHKEYGEN} -q -N '' -t $t -f	  ${OBJ}/$t
43$SUDO cp $OBJ/$t $OBJ/host.$t
44echo HostKey $OBJ/host.$t >> $OBJ/sshd_config
45
46# add hostkeys to known hosts
47mkdir -p ${OBJ}/${USER}/hostkeys
48HK=${OBJ}/${USER}/hostkeys/key_${PORT}_127.0.0.1
49${SSHKEYGEN} -e -f ${OBJ}/rsa.pub > ${HK}.ssh-rsa.pub
50
51cat > ${OBJ}/ssh2_config << EOF
52*:
53	QuietMode			yes
54	StrictHostKeyChecking		yes
55	Port				${PORT}
56	User				${USER}
57	Host				127.0.0.1
58	IdentityFile			${OBJ}/id.list
59	RandomSeedFile			${OBJ}/random_seed
60        UserConfigDirectory             ${OBJ}/%U
61	AuthenticationSuccessMsg	no
62	BatchMode			yes
63	ForwardX11			no
64EOF
65
66# we need a real server (no ProxyConnect option)
67start_sshd
68
69# go for it
70for v in ${VERSIONS}; do
71	ssh2=${TEST_COMBASE}/${v}/ssh2
72	if [ ! -x ${ssh2} ]; then
73		continue
74	fi
75	verbose "ssh2 ${v}"
76	key=ssh-rsa
77	skipcat=0
78        case $v in
79        2.1.*|2.3.0)
80                skipcat=1
81                ;;
82        3.0.*)
83                key=ssh-rsa
84                ;;
85        esac
86	cp ${HK}.$key.pub ${HK}.pub
87
88	# check exit status
89	${ssh2} -q -F ${OBJ}/ssh2_config somehost exit 42
90	r=$?
91        if [ $r -ne 42 ]; then
92                fail "ssh2 ${v} exit code test failed (got $r, expected 42)"
93        fi
94
95	# data transfer
96	rm -f ${COPY}
97	${ssh2} -F ${OBJ}/ssh2_config somehost cat ${DATA} > ${COPY}
98        if [ $? -ne 0 ]; then
99                fail "ssh2 ${v} cat test (receive) failed"
100        fi
101	cmp ${DATA} ${COPY}	|| fail "ssh2 ${v} cat test (receive) data mismatch"
102
103	# data transfer, again
104	if [ $skipcat -eq 0 ]; then
105		rm -f ${COPY}
106		cat ${DATA} | \
107			${ssh2} -F ${OBJ}/ssh2_config host "cat > ${COPY}"
108		if [ $? -ne 0 ]; then
109			fail "ssh2 ${v} cat test (send) failed"
110		fi
111		cmp ${DATA} ${COPY}	|| \
112			fail "ssh2 ${v} cat test (send) data mismatch"
113	fi
114
115	# no stderr after eof
116	rm -f ${COPY}
117	${ssh2} -F ${OBJ}/ssh2_config somehost \
118		exec sh -c \'"exec > /dev/null; sleep 1; echo bla 1>&2; exit 0"\' \
119		2> /dev/null
120        if [ $? -ne 0 ]; then
121                fail "ssh2 ${v} stderr test failed"
122        fi
123done
124
125rm -rf ${OBJ}/${USER}
126for i in ssh2_config random_seed id.list id.com id.com.pub id.openssh; do
127	rm -f ${OBJ}/$i
128done
129