Granice multipleksowania SSH


26

Mam następujący wpis w moim .ssh/configpliku

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

Powyższe pozwala mi multipleksować wiele sesji ssh poprzez to samo połączenie ssh bez konieczności wpisywania hasła za każdym razem, gdy potrzebuję nowej sesji (o ile połączenie główne pozostaje otwarte).

Zauważyłem jednak, że gdy mam stosunkowo dużą liczbę multipleksowanych połączeń (~ 7), nie mogę dodać więcej sesji do tego samego multipleksowanego połączenia i zaczynam wyświetlać następujący błąd:

> ssh -X AAA

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

Moje pytania:

Dlaczego dostaję ten błąd? Czy jest limit w liczbie sesji ssh, które mogę multipleksować w tym samym połączeniu? Czy mogę zmienić ten limit? Czy to byłby zły pomysł?


2
Nie mogę bezpośrednio odpowiedzieć na pytania, ale mogę podać sugestie dotyczące wyśledzenia problemu. Ponieważ peer odmówił połączenia, zacznę od przejrzenia dzienników w systemie, z którym się łączysz. Sprawdź, czy sshd daje jakieś błędy. Jeśli nie, zwiększ LogLevel i spróbuj ponownie. Jeśli znajdziesz komunikat dziennika, który nie jest od razu oczywisty, a wyszukiwanie frazy nie pomaga, możesz użyć grep na kodzie źródłowym. Komunikaty o błędach często otoczone są zestawami warunków - jeden (lub kilka) z nich nie został spełniony i dlatego ten komunikat pojawił się.
Shawn J. Goff,

Odpowiedzi:


26

sshdDemon na serwerze jest ograniczenie liczby sesji na połączenia sieciowego. Jest to kontrolowane przez MaxSessionsopcję w /etc/ssh/sshd_config. W MaxStartupsprzypadku dużej liczby sesji może być konieczne zwiększenie opcji. (Zobacz man sshd_configwięcej szczegółów.) Opcja modyfikacji MaxSessionslimitu została wprowadzona w OpenSSH 5.1 i wygląda na to, że liczba ta była wcześniej sztywno ustalona na 10. Jeśli przekroczysz MaxSessionsna serwerze, zobaczysz sshd[####]: error: no more sessionsw dzienniku serwera.


4

Natknąłem się na ten problem na serwerze z wcześniejszą wersją OpenSSH. Kontroluję serwer i rozwiązałem problem, tworząc dwie nazwy CNAME w mojej nazwanej konfiguracji:

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.

Następnie w mojej lokalnej konfiguracji klienta 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

Instrukcja ControlPath jest taka, że ​​nazwy gniazd sterujących się nie nadepną.

To wszystko, ale aby ułatwić zarządzanie, napisałem skrypt otoki dla „ssh” po stronie klienta. Rozumie, że istnieją „grupy” hostów (w tym przypadku realhost, realhost1, realhost2 stanowią jedną grupę). Wydając „sshwrapper realhost”, jeśli nie ma żadnych otwartych kanałów, wszystkie trzy są otwarte i rozpoczyna się jedna sesja. Przy następnym uruchomieniu zlicza otwarte połączenia na kanał i otwiera nową sesję na kanale z najmniejszą liczbą połączeń.

Z jednym prawdziwym i dwoma „fałszywymi” hostami, mogę połączyć się 30 razy przed otrzymaniem błędu. Logowanie jest niezwykle szybkie, z tym że początkowy czas zajmuje sekundę lub dwie, ponieważ wszystkie trzy kanały sterujące są wówczas otwarte.


Skrypt brzmi jak prawdziwa oszczędność czasu i byłby naprawdę przydatny. Jeśli nadal go masz, czy miałbyś coś przeciwko udostępnieniu go opinii publicznej?
theourourhehe

Nie jestem pewien, czy jest to właściwe tutaj, ponieważ nie jest to odpowiedź na pytanie. Ponadto właśnie napisałem to dla siebie i działa na kliencie Mac (aby zalogować się na moje serwery Linux). Kod analizuje dane wyjściowe „ps” i należy go zmienić, aby działał w systemie Linux, z powodu innej składni „ps”.
Joe

Słusznie. Dziękujemy za podzielenie się ogólnym pomysłem.
thefourtheye

Skrypt został umieszczony na stronie moosiefinance.com:8081/sshm.zip.
Joe

Wspaniale ...
Wielkie
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.