phdru.name / Russian / Software

Несколько сеансов SSH по одному соединению

(English version of the text.)

OpenSSH4 в Unix позволяет осуществлять connection sharing - пускать несколько сеансов по одному соединению TCP/IP. Достоинства такого подхода - не надо создавать новое соединение TCP для каждого клиента; не надо выполнять аутентификацию; т.о. второй и последующие сеансы инициализируются гораздо быстрее. Удобно при частом использовании коротких сеансов - scp, sftp, rsync+ssh, git+ssh, hg+ssh, svn+ssh - открываю окно с ssh на сервер, и быстро запускаю столько клиентов scp/sftp/rsync/git/hg/svn, сколько надо; потом ненужное окно ssh можно закрыть.

Подробную документацию ищите в man ssh_config, описание опций ControlMaster и ControlPath. В интернете полно информации.

Добавьте в ~/.ssh/config настройки:

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

ControlMaster auto означает, что первый запущенный клиент откроет сеанс, и создаст unix socket, указанный в ControlPath, а все прочие будут пользоваться этим созданным сеансом, соединяясь с мастером через unix socket; в случае попытки завершения первого сеанса первый клиент будет ждать завершения всех остальных сеансов; если мастер прибить, он закроет все сессии, открытые через него.

ControlPersist как раз и есть способ удержания открытого соединения. При его использовании ssh заранее запустит демона, который будет держать соединение открытым в течении указанного количества секунд после того, как завершится последний клиент.

Я использовал все 3 рекомендуемых макроса, потому что я использую ssh/scp/sftp/rsync/git/hg/svn со многими серверами.

Недостатки: последующие сессии наследуют некоторые свойства мастера, например, agent forwarding. В случае падения ssh, ОС или компьютера файл unix socket необходимо удалять вручную; когда я с этим столкнулся, я изменил ControlPath на ~/.ssh/controls/%r@%h:%p и добавил в свой crontab:

@reboot rm -f .ssh/controls/*

Эта страница https://phdru.name/Russian/Software/ssh_connection_sharing.html была сгенерирована 14.07.2021 в 00:38:06 из шаблона CheetahTemplate ssh_connection_sharing.tmpl; Некоторые права зарезервированы. Вы можете узнать о технических аспектах этого сайта.