Grenzen des SSH-Multiplexing


26

Ich habe den folgenden Eintrag in meiner .ssh/configDatei

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

Mit dem obigen Befehl kann ich mehrere SSH-Sitzungen über dieselbe SSH-Verbindung multiplexen, ohne jedes Mal das Kennwort eingeben zu müssen, wenn ich eine neue Sitzung benötige (solange die Masterverbindung offen bleibt).

Ich habe jedoch festgestellt, dass ich nach einer relativ hohen Anzahl gemultiplexter Verbindungen (~ 7) nicht mehr Sitzungen zu derselben gemultiplexten Verbindung hinzufügen kann und folgende Fehlermeldung erhalte:

> ssh -X AAA

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

Meine Fragen:

Warum erhalte ich diesen Fehler? Gibt es ein Limit für die Anzahl der SSH-Sitzungen, die ich in derselben Verbindung multiplexen kann? Kann ich dieses Limit ändern? Wäre das eine schlechte Idee?


2
Ich kann die Fragen nicht direkt beantworten, kann aber einige Vorschläge zur Fehlersuche machen. Da der Peer die Verbindung abgelehnt hat, überprüfe ich zunächst die Protokolle des Systems, zu dem Sie eine Verbindung herstellen. Überprüfen Sie, ob sshd Fehler liefert. Wenn nicht, erhöhen Sie den LogLevel und versuchen Sie es erneut. Wenn Sie eine Protokollmeldung finden, die nicht sofort offensichtlich ist und die Suche nach der Phrase nicht hilft, können Sie den Quellcode mit grep bearbeiten. Fehlermeldungen werden häufig von Bedingungssätzen umgeben - einer (oder einige) von ihnen wurden nicht erfüllt, weshalb diese Meldung angezeigt wurde.
Shawn J. Goff

Antworten:


26

Der sshdDaemon auf dem Server begrenzt die Anzahl der Sitzungen pro Netzwerkverbindung. Dies wird durch die MaxSessionsOption in gesteuert /etc/ssh/sshd_config. Außerdem muss die MaxStartupsOption möglicherweise erweitert werden, wenn Sie eine große Anzahl von Sitzungen verwenden. ( man sshd_configWeitere Informationen finden Sie unter.) Die Option zum Ändern des MaxSessionsGrenzwerts wurde in OpenSSH 5.1 eingeführt, und es sieht so aus, als ob die Zahl zuvor fest auf 10 festgelegt war. Wenn Sie MaxSessionsauf dem Server einen Wert übersteigen , wird dies sshd[####]: error: no more sessionsim Serverprotokoll angezeigt.


4

Ich bin auf einem Server mit einer früheren Version von OpenSSH auf dieses Problem gestoßen. Ich kontrolliere den Server und habe das Problem gelöst, indem ich zwei CNAMEs in meiner benannten Konfiguration erstellt habe:

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.

Dann in meiner lokalen ssh-Client-Konfiguration:

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

Die ControlPath-Anweisung ist so, dass die Control-Socket-Namen nicht aufeinander treten.

Das war's, aber um die Verwaltung zu vereinfachen, habe ich auf der Clientseite ein Wrapper-Skript für 'ssh' geschrieben. Es versteht sich, dass es "Gruppen" von Hosts gibt (in diesem Fall umfassen realhost, realhost1, realhost2 eine Gruppe). Wenn Sie 'sshwrapper realhost' ausgeben und keine offenen Kanäle vorhanden sind, werden alle drei geöffnet und eine Sitzung wird gestartet. Bei der nächsten Ausführung werden die offenen Verbindungen pro Kanal gezählt und die neue Sitzung im Kanal mit den wenigsten Verbindungen geöffnet.

Mit einem echten und zwei "falschen" Hosts kann ich 30-mal eine Verbindung herstellen, bevor eine Fehlermeldung angezeigt wird. Die Anmeldung ist extrem schnell, außer dass die anfängliche Zeit ein oder zwei Sekunden dauert, da zu diesem Zeitpunkt alle drei Steuerkanäle geöffnet sind.


Das Skript klingt wie eine echte Zeitersparnis und es wäre wirklich nützlich. Wenn Sie es noch haben, würde es Ihnen etwas ausmachen, es mit der Öffentlichkeit zu teilen?
thefourtheye

Ich bin mir nicht sicher, ob es hier angebracht ist, da es nicht die Antwort auf eine Frage ist. Außerdem habe ich es nur für mich selbst geschrieben und es läuft auf einem Mac-Client (um mich bei meinen Linux-Servern anzumelden). Der Code analysiert die 'ps'-Ausgabe und muss geändert werden, um unter Linux ausgeführt zu werden, da die Syntax von' ps 'abweicht.
Joe

Meinetwegen. Vielen Dank für die allgemeine Idee.
thefourtheye

Ich habe das Skript unter moosiefinance.com:8081/sshm.zip platziert.
Joe

Genial ... Vielen Dank ... Lassen Sie mich das durchgehen
thefourtheye
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.