Увеличение скорости ssh подключения к одному и тому же хосту


Думаю каждый кто использовал RSA-ключи по работе представляет себе какие это муки приходя на работу открывать 100500 коннектов к одному и тому же серверу. Утомительное занятие, не правда ли? На днях подсказали как можно ускорить все это дело, чему был безумно рад и с вами хочу поделиться. Подробности под катом.

В OpenSSH версии 4.0 была представлена функция ControlMaster, если коротко об этой функции то… При первом подключении к нашему хосту создается мастер подключение, а все последующие подключения выступают в роли клиента подключающемуся к этому мастеру. Получается некое мультиплексирование подключения.

Что для этого нужно? Идем в ~/.ssh/config и дописываем к нашему хосту/хостам 3 строки:

ControlMaster auto
ControlPersist 60
ControlPath ~/.ssh/cm_socket/%r@%h:%p

Пройдемся по ним:

ControlMaster - разрешает несколько подключений через одно, а параметр ‘auto’ говорит о том что будет создаваться новый сокет, если таковой не будет найден;

ControlPersist - после того как мы разрываем подключение мастер остается работать в фоне и только спустя 60 сек. он закрывается и удаляет сокет, это дает нам время чтобы в течении некоторого времени подключиться к нашему серверу если случайно закрыли сессию;

ControlPath - путь куда будут складываться сокеты с именем имя_пользователя@хост:порт.

В итоге вот что должно получиться:

Host myhost
    Hostname myhost.domain.com
    Port 22
    User user
    ControlMaster auto
    ControlPersist 60
    ControlPath ~/.ssh/cm_socket/%r@%h:%p

Итого, после того как наберем:

ssh myhost

Мы начнем подключаться к нашему хосту вводя как обычно пароль, но вот после подключения мы можем зайти в ~/.ssh/cm_socket и увидеть созданный мастер сокет нашего подключения:

$ ls ~/.ssh/cm_socket/
user@myhost.domain.com:22

Теперь все последующие подключения будут обращаться уже к мастеру и ничего вводить не потребуется, кстати если заметите после подключения будет выводиться вот такое сообщение:

NOTE: 2013-01-08 Enabled ssh connection multiplexing (ControlMaster) globally to speedup multiple logins to the same host, To disable run ssh with the "-S none" option

Напоследок даю пример конфига для screen‘a, который позволит открыть сразу несколько закладок с подключением к нужному хосту:

screen -t myhost1 1 ssh myhost1
screen -t myhost2 2 ssh myhost2
screen -t myhost2 3 ssh myhost2

и для tmux‘a:

new -n myhost1 'ssh myhost1'
neww -n myhost2 'ssh myhost2'
neww -n myhost2 'ssh myhost2'
comments powered by Disqus