Как повторно использовать соединение 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
устанавливает время, в течение которого соединение должно оставаться открытым из-за неактивности