#!/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 "${@}"