Я пытаюсь нажимать один набор команд на несколько удаленных хостов. Я могу использовать следующее на индивидуальной основе:
ssh [email protected] "bash -s" <./commands.sh
Я могу поместить это в цикл, но затем я застрял в наборе пароля n раз. Отключение подсказок пароля в конфигурационных файлах SSH не является для меня вариантом. Я попытался использовать ожидание в цикле, но я не могу заставить его работать.Невозможно выполнить SSH скрипт команд bash через expect
#!/bin/bash
HOSTS="host1 host2"
read -sp "Password: " PASSWORD
for HOST in $HOSTS; do
expect -c "
spawn /usr/bin/ssh [email protected]$HOST "bash -s" <./commands.sh
expect_before {
"*yes/no*" {send "yes"\r;exp_continue}}
expect {
"*Password*" {send $PASSWORD\r;interact}}
exit"
done
Я получаю следующее сообщение об ошибке:
spawn /usr/bin/ssh [email protected] bash
expect: invalid option -- 's'
usage: expect [-div] [-c cmds] [[-f] cmdfile] [args]
spawn /usr/bin/ssh [email protected] bash
expect: invalid option -- 's'
usage: expect [-div] [-c cmds] [[-f] cmdfile] [args]
Любые идеи? Похоже, что ожидание пытается интерпретировать команды bash. Я не знаю, как остановить это.
Первый '' '' '' bash -s ''слишком рано заканчивает ваш скрипт' ожидать'. Измените '' '' '' '' на протяжении всего сценария ожидания (от строки 'spawn' до' exit ' строка – cxw
«... не вариант». Было ли сказано, что требуется аутентификация пароля или вы просто не знаете, как использовать аутентификацию с открытым ключом? – chepner
Я изменил свою строку кода, содержащую команду ssh, на следующую и все сработало. 'spawn sh -c {ssh root @ $ HOST 'bash -ls' Mike