Есть способы выполнения локального скрипта на удаленных хостах через ssh. Т.е. все понятно, есть всякие puppet-ы, ansible-ы и прочее добро, но они массивны, требуют сетапа и настройки, и далеко не всегда это необходимо делать.

Есть несколько серверов, на них надо быстренько выполнить скриптик и забыть об этом, так? Ну вот, без дополнительных инструментов, это сводится к тому, что мы открываем подключение к серверу через ssh, и желаемый скрипт перенаправляем в stdin удаленного сервера, строго говоря просто набор команд из скрипта.

С bash все понятно, там сама шелл оболочка и есть интерпретатор команд, т.е. действуем так:

ssh -T -l$USER $HOST 'bash -s' < script.sh

А что же делать, если мы стали продвинутыми и перешли глобально на использование python в своем скриптинге? 🙂

Если таким же образом отправлять в bash скрипт на питоне — он будет множественно ругаться на непонятные ему инструкции.

В принципе решение очевидно, если bash для sh-скриптов, значит видимо надо указать другой интерпретатор, а именно python? Так и есть, и выглядит это буквально так:

ssh -T -l$USER $HOST 'python' < script.py

Вот и все! Таким несложным способом, можно написать необходимый скрипт и запустить его на одном или десятке серверов.

Кстати, если надо на многих серверах это сделать, и без подручных инструментов, можно написать вот такой симбиоз bash+python:

for host in $(cat host_list); do echo ${host}; ssh -T -l$USER $host 'python' < script.py; done

Вообще, если уж совсем красиво, то можно написать один скрипт на python и делать всю работу внутри него, т.е. отдельно функции — для логики, и отдельно функцию для запуска этой логики на внешних нодах. Но это уже чуть более заморочено, но круче, да :).