Вы можете запускать локальные сценарии удаленно, выполняя bash
в удаленной системе и передавая им свой сценарий
$ ssh user@host 'bash -s' < script.sh
редактировать
Для выполнения команд, требующих использования sudo
на удаленной машине, используйте ssh's
-t
опцию и передайте команды ssh
. -t
Вариант выделяет псевдо TTY и позволяет взаимодействие пользователя с команды пробежал ssh
, например , при вводе пароляsudo
$ ssh user@host -t 'sudo foo'
Для изменения файла с помощью этого метода sed
рекомендуется использовать перенаправление, >
поскольку перенаправление оболочки не позволяет записывать файлы при использовании sudo
. Кроме того, все переменные в sed
команде должны быть экранированы при их передаче ssh
.
$ ssh user@host -t 'sudo sed -i "\$a text to insert" /path/to/file'
Чтобы автоматизировать все это:
#!/bin/bash
SERVERS=( server1 server2 server3 )
for HOST in ${SERVERS[@]}; do
ssh user@${HOST} -t 'sudo sed -i "\$a text to insert" /path/to/file'
if [[ $? -ne 0 ]]; then
echo "ERROR: $HOST did not complete"
else
echo "$HOST complete"
fi
done
fabric.contrib.files.sed
метод.