libssh2

Форк
0
/
test_sshd.test 
169 строк · 4.0 Кб
1
#!/usr/bin/env bash
2
# Copyright (C) Simon Josefsson
3
# Copyright (C) Viktor Szakats
4
# SPDX-License-Identifier: BSD-3-Clause
5
#
6
# Start sshd, invoke test(s), saving exit code, kill sshd, and
7
# return exit code.
8

9
set -e
10
set -u
11

12
# https://testanything.org/tap-specification.html
13

14
d="$(dirname "$0")"
15
uname="$(uname)"
16

17
# Load list of tests
18

19
if [ -n "${1:-}" ]; then
20
  # for CMake or manual
21
  tests="$*"
22
  via_args=1
23
else
24
  # for autotools
25
  via_args=0
26
  # Load list of SSHD tests from Makefile.inc
27
  tests=''
28
  load=0
29
  while read -r l; do
30
    if [[ "${l}" = 'SSHD_TESTS ='* ]]; then
31
      load=1
32
    elif [ "${load}" = '1' ]; then
33
      [[ "${l}" =~ [a-z0-9_]+ ]] && tests+="${tests:+ }./${BASH_REMATCH[0]}${EXEEXT:-}"
34
      [[ ! "${l}" = *"\\" ]] && break
35
    fi
36
  done <<< "$(tr -d $"\r" < "${d}/Makefile.inc")"
37
fi
38

39
if [ -n "${SSHD_TESTS_LIMIT_TO:-}" ]; then
40
  tests="$(echo "${tests}" | cut -d ' ' -f -"${SSHD_TESTS_LIMIT_TO}")"
41
  echo "# limiting tests to the first ${SSHD_TESTS_LIMIT_TO}."
42
fi
43

44
# Init and start sshd
45

46
d="$(cd "${d}" || exit; pwd)"  # sshd needs absolute paths
47

48
SSHD="${SSHD:-/usr/sbin/sshd}"
49
[[ "${uname}" = *'_NT'* ]] && SSHD="$(cygpath "${SSHD}")"
50
ver="$("${SSHD}" -V 2>&1 || true)"
51
if [[ "${ver}" =~ OpenSSH_[a-zA-Z0-9_\ .,]+ ]]; then
52
  ver="${BASH_REMATCH[0]}"
53
else
54
  ver=''
55
fi
56
echo "# sshd executable: '${SSHD}' (${ver})"
57

58
# for our test clients:
59
[ -z "${PRIVKEY:-}" ] && export PRIVKEY="${d}/key_rsa"
60
[ -z "${PUBKEY:-}" ]  && export PUBKEY="${d}/key_rsa.pub"
61
cakeys="${d}/openssh_server/ca_user_keys.pub"
62

63
logfsrv="$(mktemp)"; readonly logfsrv
64
logfcli="$(mktemp)"; readonly logfcli
65

66
echo "# sshd log: '${logfsrv}'"
67

68
SSHD_FLAGS="${SSHD_FLAGS:-}"
69
if [ -n "${DEBUG:-}" ]; then
70
  SSHD_FLAGS+=' -d -d'
71
else
72
  SSHD_FLAGS+=" -E ${logfsrv}"
73
fi
74

75
chmod go-rwx \
76
  "${d}"/openssh_server/ssh_host_* \
77
  "${cakeys}"
78

79
# shellcheck disable=SC2086
80
"${SSHD}" \
81
  -f "${SSHD_FIXTURE_CONFIG:-${d}/openssh_server/sshd_config}" \
82
  -o 'Port 4711' \
83
  -o 'StrictModes no' \
84
  -h "${d}/openssh_server/ssh_host_rsa_key" \
85
  -h "${d}/openssh_server/ssh_host_ecdsa_key" \
86
  -h "${d}/openssh_server/ssh_host_ed25519_key" \
87
  -o 'PidFile sshd.pid' \
88
  -o "AuthorizedKeysFile ${PUBKEY} ${d}/openssh_server/authorized_keys" \
89
  -o "TrustedUserCAKeys ${cakeys}" \
90
  -o 'PermitRootLogin yes' \
91
  -D \
92
  ${SSHD_FLAGS} &
93
sshdpid=$!
94

95
trap 'kill "${sshdpid}"; echo "# signal killing sshd"; exit 1;' EXIT HUP INT TERM
96

97
: "started sshd (${sshdpid})"
98

99
SSH="$(command -v "${SSH:-ssh}" || true)"
100
if [ -n "${SSH}" ]; then
101
  echo "# ssh executable: '${SSH}' ($("${SSH}" -V 2>&1 || true))"
102
  echo "# ssh log: '${logfcli}'"
103
  chmod go-rwx "${PRIVKEY}"
104
  if [[ "${uname}" = *'_NT'* ]]; then
105
    export MSYS2_ARG_CONV_EXCL='/reset'
106
    icacls "${PRIVKEY}" /reset
107
    icacls "${PRIVKEY}" /grant:r "${USERNAME}:(R)"
108
    icacls "${PRIVKEY}" /inheritance:r
109
  fi
110
  count=1
111
  # shellcheck disable=SC2086
112
  while ! "${SSH:-ssh}" -q -a -k \
113
      -F /dev/null \
114
      -o 'BatchMode yes' \
115
      -o 'StrictHostKeyChecking no' \
116
      -o 'UserKnownHostsFile /dev/null' \
117
      -o 'ConnectTimeout 3' \
118
      -i "${PRIVKEY}" \
119
      -p 4711 ${SSH_FLAGS:-} localhost exit 2>>"${logfcli}"; do
120
    ((count++))
121
    if [[ "${count}" -gt 8 ]]; then
122
      echo '# giving up waiting for sshd. Tests are expected to fail.'
123
      echo '# sshd log:'
124
      sed 's/^/#  /' < "${logfsrv}"
125
      echo '# ssh test connect log:'
126
      sed 's/^/#  /' < "${logfcli}"
127
      break
128
    fi
129
    echo '# waiting for sshd...'
130
    sleep 1
131
  done
132
else
133
  echo '# giving time for sshd to launch...'
134
  sleep 5
135
fi
136

137
# Run tests
138

139
ec=0
140
count=1
141
total="$(echo "${tests}" | wc -w | tr -d ' ')"
142
anyerror=0
143

144
echo "${count}..${total}"
145

146
export OPENSSH_NO_DOCKER=1
147

148
for test in ${tests}; do
149
  if "${test}"; then
150
    res='ok'
151
  else
152
    testerr=$?
153
    anyerror=1
154
    [ "${via_args}" = '1' ] && [ "${total}" = '1' ] && ec="${testerr}"
155
    res='not ok'
156
  fi
157
  echo "${res} ${count} - sshd-$(basename "${test}")"
158
  ((count++))
159
done
160

161
# Stop sshd
162

163
: "killing sshd (${sshdpid})"
164
kill "${sshdpid}" > /dev/null 2>&1
165
trap '' EXIT HUP INT TERM
166

167
[ "${via_args}" = '1' ] && [ "${total}" != '1' ] && ec="${anyerror}"
168

169
exit "${ec}"
170

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.