support non-standard SSH ports, fix some shellchecks

This commit is contained in:
2021-08-30 19:09:43 +02:00
parent 4c8127c388
commit 46903a4038
3 changed files with 65 additions and 41 deletions

View File

@@ -2,11 +2,11 @@
# SPDX-FileCopyrightText: 2019 Max Mehl <mail [at] mehl [dot] mx>
# SPDX-License-Identifier: GPL-3.0-or-later
########################################################################
#
# Reads hosts file and checks SSH access. If not possible with public
# key, this script tries to place the system's public key on the host
# via a normal (password-based) SSH access attempt.
#
#
# Reads hosts file and checks SSH access. If not possible with public
# key, this script tries to place the system's public key on the host
# via a normal (password-based) SSH access attempt.
#
########################################################################
CURDIR=$(dirname "$(readlink -f "$0")")
@@ -15,7 +15,7 @@ source "$CURDIR"/config.cfg
if [ ! -e "${HOSTS}" ]; then echo "Missing hosts file. Please set a correct value of HOSTS= in your config file. Current value: ${HOSTS}"; exit 1; fi
if [ ! -z "${SSH_KEY}" ]; then
if [ -n "${SSH_KEY}" ]; then
SSH_KEY_ARG="-i ${SSH_KEY}"
else
# defaults
@@ -29,19 +29,31 @@ function trim {
sed -r -e 's/^\s*//g' -e 's/\s*$//g'
}
while read line; do
while read -r line; do
# if line is a comment, go to next line
if $(echo "$line" | grep -qE "^\s*#"); then continue; fi
if echo "$line" | grep -qE "^\s*#"; then continue; fi
RHOST=$(echo "$line" | cut -d";" -f1 | trim)
# Jump to next line if this line's host does not match host of ARG1 (if given)
if [[ "${ARG1}" != "" ]] && [[ "${ARG1}" != "${RHOST}" ]]; then
continue
fi
# Get SSH port if needed
if echo "$RHOST" | grep -q ":"; then
RPORT=$(echo "$RHOST" | cut -d":" -f2)
RHOST=$(echo "$RHOST" | cut -d":" -f1)
RPORT_ARG="-p ${RPORT}"
else
# defaults
RPORT=""
RPORT_ARG=""
fi
echo "[INFO] Trying ${RHOST}"
STATUS=$(ssh -n -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=5 ${SSH_KEY_ARG} ${RHOST} "echo -n"; echo $?)
STATUS=$(ssh -n -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=5 ${RPORT_ARG} ${SSH_KEY_ARG} "${RHOST}" "echo -n"; echo $?)
if [ $STATUS != 0 ]; then
echo -n "[ERROR] No SSH login possible for ${RHOST}. "
@@ -50,12 +62,12 @@ while read line; do
exit 1
else
echo "Adding public key with password: "
cat "${SSH_KEY}".pub | ssh ${RHOST} 'cat >> ~/.ssh/authorized_keys'
cat "${SSH_KEY}".pub | ssh -o StrictHostKeyChecking=no ${RPORT_ARG} ${SSH_KEY_ARG} "${RHOST}" 'cat >> ~/.ssh/authorized_keys'
fi
else
echo "[SUCCESS] SSH login possible for ${RHOST}."
fi
echo
done < "$HOSTS"