Какой самый простой способ использовать ssh и запускать несколько команд в Bash? - PullRequest
307 голосов
/ 10 декабря 2010

У меня уже есть настроенный агент ssh, и я могу запускать команды на внешнем сервере в скрипте Bash, выполняя такие вещи:

ssh blah_server "ls; pwd;"

Теперь, что я действительно хотел бы сделать, это запуститьмного длинных команд на внешнем сервере.Заключать все это в кавычки было бы ужасно, и я бы предпочел избегать многократного использования ssh'а просто для того, чтобы избежать этого.

Итак, есть ли способ сделать это за один раз, заключенный в скобки, или что-то в этом роде?Я ищу что-то вроде:

ssh blah_server (
   ls some_folder;
   ./someaction.sh;
   pwd;
)

В принципе, я буду рад любому решению, пока оно чистое.

Редактировать

Комупоясните, я говорю о том, что это часть более крупного скрипта bash.Другим людям может понадобиться разобраться со сценарием, поэтому я бы хотел сохранить его в чистоте.Я не хочу иметь bash-скрипт с одной строкой, которая выглядит следующим образом:

ssh blah_server "ls some_folder; ./someaction.sh 'some params'; pwd; ./some_other_action 'other params';"

, потому что он чрезвычайно уродлив и труден для чтения.

Ответы [ 12 ]

2 голосов
/ 23 сентября 2016

Самый простой способ настроить систему на использование одиночных сессий ssh ​​по умолчанию с мультиплексированием.

Это можно сделать, создав папку для сокетов:

mkdir ~/.ssh/controlmasters

А затем добавьте в вашу конфигурацию .ssh следующее:

Host *
    ControlMaster auto
    ControlPath ~/.ssh/controlmasters/%r@%h:%p.socket
    ControlMaster auto
    ControlPersist 10m

Теперь вам не нужно изменять какой-либо код. Это позволяет выполнять несколько вызовов ssh и scp без создания нескольких сессий, что полезно, когда требуется большее взаимодействие между локальными и удаленными компьютерами.

Благодаря ответу @ terminus, http://www.cyberciti.biz/faq/linux-unix-osx-bsd-ssh-multiplexing-to-speed-up-ssh-connections/ и https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing.

0 голосов
/ 09 ноября 2018

Не уверен, что самый чистый для длинных команд, но, безусловно, самый простой:

ssh user@host "cmd1; cmd2; cmd;3"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...