Пределы SSH мультиплексирования


26

У меня есть следующая запись в моем .ssh/configфайле

Host AAA
    User BBB
    HostName CCC
    ControlMaster auto
    ControlPath ~/.ssh/%r@%h:%p

Вышеупомянутое позволяет мне мультиплексировать несколько сессий ssh ​​через одно и то же соединение ssh без необходимости вводить пароль каждый раз, когда мне нужен новый сеанс (до тех пор, пока мастер-соединение остается открытым).

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

> ssh -X AAA

mux_client_request_session: session request failed: Session open refused by peer
Password: 

Мои вопросы:

Почему я получаю эту ошибку? Есть ли предел количества сессий ssh, которые я могу мультиплексировать в одном соединении? Могу ли я изменить этот лимит? Это была бы плохая идея?


2
Я не могу ответить на вопросы напрямую, но могу предложить несколько советов по выявлению проблемы. Поскольку узел отказался от соединения, я бы начал с просмотра журналов системы, к которой вы подключаетесь. Посмотрите, дает ли sshd какие-либо ошибки. Если нет, увеличьте LogLevel и попробуйте снова. Если вы нашли сообщение в журнале, которое не сразу видно, и поиск фразы не помог, вы можете использовать grep в исходном коде. Сообщения об ошибках часто окружены наборами условий - одно (или несколько) из них не были выполнены, и именно поэтому это сообщение появилось.
Шон Дж. Гофф

Ответы:


26

sshdДемон на сервере ограничивает число сеансов на подключение к сети. Это контролируется MaxSessionsопцией в /etc/ssh/sshd_config. Также MaxStartupsможет потребоваться увеличить эту опцию, если вы используете большое количество сеансов. (См. man sshd_configБолее подробную информацию.) Опция изменения MaxSessionsпредела была введена в OpenSSH 5.1, и похоже, что ранее это число было жестко установлено на 10. Если вы превысили MaxSessionsна сервере, вы увидите sshd[####]: error: no more sessionsв журнале сервера.


4

Я столкнулся с этой проблемой на сервере с более ранней версией OpenSSH. Я управляю сервером и решил проблему, создав два CNAME в моей именованной конфигурации:

realhost.myexample.com.      IN  A       XXX.XXX.XXX.XXX
realhost2.myexample.com.     IN  CNAME   realhost.myexample.com.
realhost3.myexample.com.     IN  CNAME   realhost.myexample.com.

Затем в моей локальной конфигурации клиента ssh:

ControlMaster auto
ControlPath ~/.ssh/%r_%p_%h

host realhost
hostname realhost.myexample.com

host realhost2
hostname realhost2.myexample.com

host realhost3
hostname realhost3.myexample.com

Оператор ControlPath используется для того, чтобы имена сокетов управления не наступали друг на друга.

Вот и все, но чтобы упростить управление, я написал скрипт-обертку для ssh на стороне клиента. Он понимает, что существуют «группы» хостов (в этом случае realhost, realhost1, realhost2 составляют одну группу). При выдаче 'sshwrapper realhost', если открытых каналов нет, все три открываются, и начинается один сеанс. При следующем запуске он подсчитывает количество открытых соединений на канал и открывает новый сеанс в канале с наименьшим количеством соединений.

С одним реальным и двумя «поддельными» хостами я могу подключиться 30 раз, прежде чем получит сообщение об ошибке. Вход в систему очень быстрый, за исключением того, что начальное время занимает секунду или две, так как все три канала управления открыты в это время.


Сценарий звучит как реальная экономия времени, и это было бы очень полезно. Если у вас все еще есть, не могли бы вы поделиться этим с общественностью?
TheFourtheye

Я не уверен, что это уместно здесь, так как это не ответ на вопрос. Кроме того, я просто написал это для себя, и он работает на клиенте Mac (для входа на мои серверы Linux). Код анализирует вывод «ps», и его необходимо изменить для запуска в Linux из-за разного синтаксиса «ps».
Джо

Справедливо. Спасибо, что поделились общей идеей.
TheFourtheye

Я разместил скрипт на moosiefinance.com:8081/sshm.zip.
Джо

Круто ... Большое спасибо ... Позвольте мне пройти через это
thefourtheye
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.