05_expect
This commit is contained in:
parent
52e2fb5260
commit
03688746a7
|
@ -2,3 +2,4 @@
|
|||
|
||||
- [01. Linux](stream/01_linux_zhirov/)
|
||||
- [02. Интерпретаторы терминала](stream/02_shells_zhirov/)
|
||||
- [05. Интерпретаторы терминала](stream/05_expect/)
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
# Работа с интерактивной оболочкой expect
|
||||
|
||||
[Expect](https://core.tcl-lang.org/expect/index) - инструмент для автоматизации интерактивных приложений таких, как telnet, ftp, passwd, fsck, rlogin, tip, настройка и использование SSH и других. Expect поддерживает механизм регулярных выражений и основные возможности программирования, позволяющие простым скриптам эффективно управлять такими программами, не обладающими встроенным скрипт-языком, макросами, или другими механизмами программирования. Эффективен при работе с сетевым оборудованием - массовое обновление конфигураций управляемого (активного) сетевого оборудования с дифференцированным выполнением команд.
|
||||
|
||||
Expect выступает в качестве клея для склеивания существующих утилит. Главная идея состоит в том, чтобы использовать уже имеющиеся инструменты, а не решать проблему внутри Expect.
|
Binary file not shown.
|
@ -0,0 +1,85 @@
|
|||
#!/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 "${@}"
|
Loading…
Reference in New Issue