Межі мультиплексування 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.