
我周圍有一些網頁伺服器,為了管理集群,我有時會使用腳本自動打開連接並使用 python 腳本將文件同步到它們,我遇到了一個奇怪的問題,我真的不知道如何修復它。
要重現測試案例,您應該有一個遠端目標,它不會立即進行連接(不在 LAN 和本機主機中),並且連接應該在不詢問密碼的情況下運行(使用金鑰檔案)
我有 16 台 PC 運行 Fedora,伺服器有 Cent OS 5、s120 和 s121——我擁有 2 台伺服器,IP 位址分配給/etc/hosts
s121 和 s120
這是一個範例命令,它在同一 shell 中同時打開 9 個到 s120 的連接 + 9 個到 s121 的連接..並且它有效!
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;\""
此命令嘗試在同一 shell 上開啟 15 個連接,所有 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;\""
它將嘗試開啟 15 個連接,幾乎立即有 5 個選項卡自行關閉,只有 10 個連接保持開啟。這個問題也發生在terminal_xfce
(我更喜歡它,因為我發現 gnome-terminal 不太穩定)
好像不允許超過10個並發開啟連接,
似乎開始時不允許超過 10 個並發連接,但如果我打開 10 個選項卡,並等待連接開始,那麼我可以打開另一個帶有 10 個選項卡的終端到同一伺服器。
(我還想說,這個測試結果與在客戶端和伺服器上停用 IP TABLES 防火牆的情況相同)
我還必須說,這個問題很煩人,尤其是在將檔案系統上的多個目標同步到同一伺服器時lsyncd
執行rsync
會導致意外結果,因為連線被作業系統終止,終端測試案例更容易重現,即使處理問題較少。
答案1
如果您的所有連線都將使用腳本命令...為什麼要使用 gnome-terminal 選項卡?您使用了大量實際上並不需要的資源,這可能會導致您遇到的限制因素。
如果您讓系統處理連接而不是強制 gnome-terminal 介入,您應該能夠獲得幾乎(出於您的目的)無限數量的連接。
for a in $( seq 1 50 ); do
ssh root@s120 my_cool_script &
ssh root@s121 my_cool_script &
done
wait
這應該在幾秒鐘內創建 100 個連接(50 到 s120、50 到 s121),所有連接都在運行 '我的酷腳本'。只要你所做的事情都是有腳本的,它就會順利進行。
「wait」指令使腳本等待所有後台作業完成後再繼續。您可能不需要/想要那個。
(而且打字也少了很多…)
答案2
在 /etc/ssh/sshd_config 中尋找 MaxStartups。
它限制了對 sshd 的未經授權的並發登入。
預設值為 10。