Для контекста у меня есть инфраструктура из нескольких машин, использующих ssh.
Мы подключаемся через ssh как root на машинах без пароля благодаря файлу author_keys на каждом компьютере. Мы регулярно добавляем новые машины в нашу инфраструктуру.
Проблема заключается в том, чтобы создать скрипт, который:
- Пингует всю машину (путем анализа файла, содержащего имена всех наших машин)
- Если пинг прошел успешно, проверьте ssh-соединение без пароля (с помощью команды
ssh -o BatchMode=yes $machine uname -a
)
- Если ssh не работает И это из-за этого сообщения:
Вы уверены, что хотите продолжить подключение (да/нет)?
(потому что это первое ssh-подключение к этой машине, например), затем с ожидаемым сценарием отправьте «да»
- Если ssh не работает И это из-за того, что запрашивается пароль, то с ожидаемым сценарием отправьте «CTRL + C»
Моя проблема в том, что два условия 3. и 4. могут произойти на одной машине, и я не могу понять, как использовать оператор continue в моем сценарии.
Этот конкретный случай будет для машины, которая запрашивает «да», но после этого также запрашивает пароль.
Вот как выглядит скрипт:
для машины в `cat ${liste} | grep -v \#`
делать
ping -c1 ${машина} 2>&1 >/dev/null
если [$? -экв 0]
тогда
эхо ${машина} >> ${пингок}
ssh -o BatchMode=yes ${машина} uname -a &> $verifssh 2>&1
эхо $? > ${код выхода}
если grep -q "255" "$exitcode"
тогда
вырезать -c 15-74 $verifssh > $verifssh2
если grep "сбой обработки". "$verifssh2"
тогда
ожидать ${scriptexpectknownhosts} ${machine} 2>&1 >/dev/null
продолжить 3
elif grep "Отказано в доступе (открытый ключ, пароль, интерактивная клавиатура)". "$verifssh2"
тогда
ожидать ${scriptexpectknownhosts} ${machine} 2>&1 >/dev/null
echo "${machine} -> Машина запрашивает пароль" >> "${sshnok}"
фи
elif grep -q "0" "$exitcode"
тогда
echo "${machine} работает с ssh"
эхо "${машина}" >> ${sshok}
фи
еще
эхо "${машина}" >> "${пингнок}"
фи
сделано
Вот сценарий ожидания (он обрабатывает обе ситуации):
установить машину [lindex $argv 0]
порождать ssh $ машина
ожидать {
"Вы уверены, что хотите продолжить подключение (да/нет)?" {send "yes\r";exp_continue}
-exact "Пароль: " {close}
-re $prompt {отправить "выход\r"; закрыть}
}
Короче говоря, моя проблема заключается в том, что для машины, которая запрашивает ответ «да», а затем мне нужен пароль, я хочу зарегистрировать их в ${сшнок}
файл, но Продолжить
не работает. Я пытался Продолжить
/ продолжить 2
/ продолжить 3
и он все еще не хочет возвращаться в предыдущий цикл.