我周围有一些 Web 服务器,为了管理集群,我有时会使用脚本,该脚本会自动打开连接并使用 python 脚本将文件同步到它们,我遇到了一个奇怪的问题,我真的不知道如何解决它..
要重现测试用例,您应该有一个不会立即建立连接的远程目标(不在 LAN 中也不在本地主机中),并且连接应该在不要求密码的情况下运行(使用密钥文件)
我有 16 台运行 Fedora 的 PC,服务器有 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,因为我发现 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。