1

Я хотел бы выполнить несколько команд через ssh из сценария на моей локальной машине, но без необходимости повторного подключения для каждой команды. Обычно я бы пошел с чем-то вроде:

$ ssh [user]@[server] '[command 1] | [command 2] | [command 3]'

Однако это лишает меня возможности узнать код выхода и выхода каждой команды. То, что я действительно хотел бы сделать, это установить ssh-соединение в фоновом режиме, а затем просто передать ему команды и получить от него, например, вывод (это, конечно, неверно, просто пример того, что мне нравится выглядеть как):

$ ssh --name=my_connection [user]@[server]
$ ssh my_connection 'command_1'
$ ssh my_connection 'command_2'
$ ssh my_connection 'command_3'

Это возможно каким-либо образом?

1 ответ1

2

Уже ответил, например, здесь на Serverfault:

Вы можете настроить ~/.ssh/config с помощью этих опций:

Host machine1
  HostName machine1.example.org
  User yourusername
  ControlPath ~/.ssh/controlmasters/%r@%h:%p
  ControlMaster auto
  ControlPersist 10m

Затем убедитесь, что вы используете mkdir ~/.ssh/controlmasters/ и с этого времени ваши подключения к machine1 будут сохраняться в течение 10 минут, чтобы вы могли выполнять больше сеансов или передачу данных в течение одного подключения.

Тогда это будет просто работа ТМ:

$ ssh [server] 'command_1'
# authenticate
$ ssh [server] 'command_2'
$ ssh [server] 'command_3'

Если у вас есть причины не использовать конфигурацию, вы можете сделать это также в командной строке:

$ ssh -MNfS ~/.ssh/controlmasters/%r@%h:%p [server]
# authenticate and go to background
$ ssh -S ~/.ssh/controlmasters/%r@%h:%p [server] 'command_1'
# authenticate
$ ssh -S ~/.ssh/controlmasters/%r@%h:%p [server] 'command_2'
$ ssh -S ~/.ssh/controlmasters/%r@%h:%p [server] 'command_3'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .