phdru.name / Russian / Software
(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 была сгенерирована 16.06.2024 в 13:04:25 из шаблона CheetahTemplate ssh_connection_sharing.tmpl; Некоторые права зарезервированы. Вы можете узнать о технических аспектах этого сайта.