learntech/stream/05_expect/test.sh

86 lines
2.2 KiB
Bash
Raw Normal View History

2023-12-15 18:52:49 +00:00
#!/bin/bash
# set -x
check_ssh() {
SSH_USER="${1}"
SSH_HOST="${2}"
SSH_PORT="${3}"
SSH_PASSWORD="${4}"
SSH_RESULT=$(expect -c "
spawn ssh -p ${SSH_PORT} ${SSH_USER}@${SSH_HOST}
expect {
-re \".*Are you sure you want to continue connecting.*\" {
send \"yes\n\"
exp_continue
}
-re \".*password.*\" {
send \"${SSH_PASSWORD}\n\"
exp_continue
}
-re \".*@.*\" {
send \"exit\n\"
expect eof
}
}
")
ANSWER_SUCCESS="Connection to ${SSH_HOST} closed."
ANSWER_ERRORS=(
"Permission denied"
"connect to host ${SSH_HOST} port ${SSH_PORT}: No route to host"
"connect to host ${SSH_HOST} port ${SSH_PORT}: Connection refused"
)
[[ $(echo "${SSH_RESULT}" | grep "${ANSWER_SUCCESS}" ) ]] && echo "Успешно подключились" && exit 0
for ANSWER in "${ANSWER_ERRORS[@]}"
do
[[ $(echo "${SSH_RESULT}" | grep "${ANSWER}" ) ]] && echo "${ANSWER}" && exit 1
done
echo "${SSH_RESULT}"
echo "Произошла неизвестная ошибка"
exit 1
}
main() {
while [[ $# -gt 0 ]]
do
KEY="${1}"
VALUE="${2}"
case "${KEY}" in
-u)
SSH_USER="${VALUE}"
shift
;;
-p)
SSH_PORT="${VALUE}"
shift
;;
-h)
SSH_HOST="${VALUE}"
shift
;;
-P)
SSH_PASSWORD="${VALUE}"
shift
;;
esac
shift
done
[ -z "${SSH_USER}" ] && echo "Не был установлен пользователь" && exit 1
[ -z "${SSH_PORT}" ] && echo "Не был установлен порт" && exit 1
[ -z "${SSH_HOST}" ] && echo "Не был установлен хост" && exit 1
[ -z "${SSH_PASSWORD}" ] && echo "Не был установлен пароль" && exit 1
check_ssh "${SSH_USER}" "${SSH_HOST}" "${SSH_PORT}" "${SSH_PASSWORD}"
exit 0
}
main "${@}"