Как повторно использовать соединение ssh

Я создаю небольшой script для обновления некоторых удаленных серверов (2+)
Я делаю несколько подключений к каждому серверу; есть ли способ, который я могу повторно использовать SSH-соединения, поэтому мне не нужно открывать слишком много сразу?

Ответы

Ответ 1

Если вы открываете первое соединение с -M:

ssh -M $REMOTEHOST

последующие соединения с $REMOTEHOST будут " $REMOTEHOST " с соединением, установленным ведущим ssh. Наиболее заметно, дальнейшая аутентификация не требуется. Смотрите man ssh_config под "ControlMaster" для более подробной информации. Используйте -S чтобы указать путь к общему сокету; Я не уверен, что по умолчанию, потому что я настраиваю общий доступ к соединению, используя вместо этого файл конфигурации.

В моем файле .ssh/config меня есть следующие строки:

host *
  ControlMaster auto
  ControlPath ~/.ssh/ssh_mux_%h_%p_%r

Таким образом, я не должен забывать использовать -M или -S; ssh выясняет, существует ли совместное соединение для комбинации хост/порт/имя пользователя, и использует его, если это возможно.

Эта опция доступна в OpenSSH с 2004 года.

Ответ 2

Я предпочитаю метод, описанный в Puppet Labs https://puppetlabs.com/blog/speed-up-ssh-by-reusing-connections

Добавьте эти строки в ~/.ssh/config и запустите mkdir ~/.ssh/sockets

Host *
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%[email protected]%h-%p
    ControlPersist 600

Прочитайте полное сообщение в блоге для получения более полезной информации о том, что они делают, и о особенностях ssh, когда они используются так. Я настоятельно рекомендую прочитать блог, или вы можете обнаружить, что все работает не так, как вы ожидаете.

Ответ 3

Кроме того, вы можете сделать это следующим образом:

$ssh_conn="ssh -t -o ControlPath=~/.ssh/master-$$ -o ControlMaster=auto -o ControlPersist=60"

$ssh_conn [email protected]
  • ControlPath=~/.ssh/master-$$ устанавливает путь управления для повторного использования соединения ssh, ограничивающего текущую оболочку (через $$ PID)
  • ControlMaster=auto позволяет совместно использовать сеанс соединения с помощью ControlPath
  • ControlPesist=60 устанавливает время, в течение которого соединение должно оставаться открытым из-за неактивности