
ich habe einige Webserver im Einsatz und verwende zur Verwaltung des Clusters manchmal ein Skript, das die Verbindungen automatisch öffnet und mithilfe von Python-Skripten Dateien mit ihnen synchronisiert. Ich bin auf ein seltsames Problem gestoßen und weiß nicht wirklich, wie ich es beheben kann.
Um den Testfall zu reproduzieren, sollten Sie ein Remote-Ziel haben, das die Verbindung nicht sofort herstellt (weder im LAN noch auf dem lokalen Host), und die Verbindung sollte ohne Kennwortabfrage (unter Verwendung von Schlüsseldateien) ausgeführt werden.
ich habe 16 PCs mit Fedora, die Server haben Cent OS 5, s120 und s121 – das sind 2 Server, die mir gehören, mit IP-Adressen, /etc/hosts
die s121 und s120 zugewiesen sind
Dies ist ein Beispielbefehl, der in derselben Shell gleichzeitig 9 Verbindungen zu s120 und 9 Verbindungen zu s121 öffnet. UND ES FUNKTIONIERT!
gnome-terminal --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab
- e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh
root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" -- tab
-e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh
root@s121;\"" --tab -e "bash -c \"ssh root@s121;\"" --tab -e "bash -c \"ssh root@s121;\"" --tab
-e "bash -c \"ssh root@s121;\"" --tab -e "bash -c \"ssh root@s121;\"" --tab -e "bash -c \"ssh
root@s121;\"" --tab -e "bash -c \"ssh root@s121;\"" --tab -e "bash -c \"ssh root@s121;\"" --tab
-e "bash -c \"ssh root@s121;\""
Dieser Befehl VERSUCHT, 15 Verbindungen auf derselben Shell zu öffnen, alle 15 TO-> s120
gnome-terminal --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab
-e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh
root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\""
--tab - e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash
- c \"ssh
root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\""
--tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c
\"ssh root@s120;\""
und es wird versucht, 15 Verbindungen zu öffnen, woraufhin sich fast sofort 5 Tabs schließen und nur 10 Verbindungen geöffnet bleiben. Dieses Problem tritt auch auf terminal_xfce
(was ich bevorzuge, weil ich Gnome-Terminal als etwas weniger stabil empfunden habe)
mehr als 10 gleichzeitig geöffnete Verbindungen sind anscheinend nicht erlaubt,
es scheint, dass beim Start nicht mehr als 10 gleichzeitige Verbindungen zulässig sind, aber wenn ich 10 Tabs öffne und warte, bis die Verbindungen hergestellt sind, kann ich ein weiteres Terminal mit 10 Tabs zum selben Server öffnen.
(ich möchte auch sagen, dass diese Testergebnisse dieselben sind, wenn die IP TABLES-Firewalls sowohl auf dem Client als auch auf den Servern deaktiviert sind)
ich muss auch sagen, dass dieses Problem besonders bei Ausführungen ärgerlich ist lsyncd
und rsync
beim Synchronisieren mehrerer Ziele im Dateisystem mit demselben Server zu unerwarteten Ergebnissen führt, weil Verbindungen vom Betriebssystem beendet werden. Der Terminaltestfall ist einfach einfacher zu reproduzieren, auch wenn die Handhabung weniger problematisch ist.
Antwort1
Wenn alle Ihre Verbindungen über Skriptbefehle erfolgen, warum sollten Sie dann die Registerkarten des Gnome-Terminals verwenden? Sie verwenden viele Ressourcen, die Sie wirklich nicht benötigen und die möglicherweise zu den einschränkenden Faktoren beitragen, die Sie erleben.
Sie sollten in der Lage sein, eine (für Ihre Zwecke) nahezu unbegrenzte Anzahl von Verbindungen herzustellen, wenn Sie die Verbindungen vom System handhaben lassen, anstatt Gnome-Terminal zum Eingreifen zu zwingen.
for a in $( seq 1 50 ); do
ssh root@s120 my_cool_script &
ssh root@s121 my_cool_script &
done
wait
Dadurch sollten innerhalb von Sekunden 100 Verbindungen (50 zu s120, 50 zu s121) erstellt werden, die alle mit 'mein_cooles_Skript„. Solange alles, was Sie tun, nach einem Skript abläuft, läuft es reibungslos.“
Der Befehl „wait“ bewirkt, dass das Skript wartet, bis alle im Hintergrund ausgeführten Jobs abgeschlossen sind, bevor es fortfährt. Das brauchen/wollen Sie vielleicht nicht.
(außerdem muss man VIEL weniger tippen …)
Antwort2
Suchen Sie in /etc/ssh/sshd_config nach MaxStartups.
Es begrenzt die nicht autorisierten gleichzeitigen Anmeldungen bei SSHD.
Der Standardwert ist 10.