У меня есть сценарий оболочки, который подключается к удаленному компьютеру для выполнения действий. Одним из таких действий является установка одного или нескольких DNS-серверов. В то время как в основном статические данные легко захватить и передать на удаленную машину через SSH:
config_ntp()
{
ssh -T admin@server_ip <<-NTPSERVER
sysconf ntp addserver $NTPSERVER
NTPSERVER
}
Создание списка команд с динамическим размером сложнее, чем я думал. Что я имею:
DNSSERVERS=(8.8.8.8 8.8.8.7)
config_dns()
{
cmd=""
for server in ${DNSSERVERS[@]}; do
cmd+="network dns add nameserver $server$'\n' "
done
cmd+="service dns restart$'\n'"
echo -e "cmd: $cmd"
ssh -T admin@server_ip $cmd
}
Результат вызова этого:
$ sh setup.sh
cmd: network dns add nameserver 8.8.8.8$'
' network dns add nameserver 8.8.8.7$'
' service dns restart$'
'
Syntax Error: Invalid character detected: '\'.
Command Result : 22 (Invalid argument)
Exiting...
Это было мое последнее воплощение. Я играл с $'\n'
, как было предложено в другом месте... раньше у меня был только \n
, что приводило к той же ошибке.
Как создать переменную, содержащую список (динамически сгенерированный список переменной длины) команд для передачи через ssh на удаленную машину?
ssh admin@server_ip /bin/sh <<-ENDOfCmd"
вместо-T
. - person F. Hauri   schedule 14.12.2017buildscript() { echo...}
иssh admin@server /bin/sh < <(buildscript)
- person F. Hauri   schedule 14.12.2017$'\n'
) находится внутри ваших двойных кавычек. Попробуйте пройти тест:echo "abc$'\n'def"
. Что ты видишь? Как насчет использования точки с запятой вместо новой строки? Или (вздох)&&
? Нет необходимости перезапускать DNS, если предыдущие изменения не увенчались успехом. - person ghoti   schedule 14.12.2017ControlMaster
в конфигурации ssh, если хотите. - person ghoti   schedule 14.12.2017