SSH最大连接Ruby脚本无法正常工作

时间:2014-04-16 13:13:22

标签: python ruby bash sockets ssh

大多数sshd安装的默认限制为10个连接。如果超过此值,则尝试连接到服务器的所有用户都将收到错误ssh_exchange_identification: Connection closed by remote host。这可以通过简单的bash onliner for i in {0..12}; do nc targetserver.com 22 & done来证明。我还写了一个python脚本来演示这个:

#!/usr/bin/env python  
import socket  
socks=[]  
print "Building sockets. . ."  
for i in range(20):  
  socks.append(socket.socket(2,1))  
  socks[i].connect(('localhost',22))  
while 1:  
  pass  
print "Done." 

完美无缺。然后我尝试使用ruby创建相同的脚本:

#!/usr/bin/env ruby  
require 'socket'  
socks = Array.new(20)  
puts "Building sockets...\n"  
for i in 0..19  
  socks[i] = TCPSocket.new('localhost', 22)  
end  
puts "Done.\n"  
while (true) do  
end  

ruby​​脚本没有出现任何错误并打印出预期的输出,但不会导致阻止其他用户连接到ssh。我验证了ruby脚本是用我写的另一个python脚本创建套接字:

#!/usr/bin/python  
from socket import socket as sock, SO_REUSEADDR as REUSE, SOL_SOCKET as SOL
host='localhost'  
port=5555
s=sock(2,1)  
s.setsockopt(SOL, REUSE, 1)  
s.bind((host,port))  
s.listen(port)  
i=0  
while 1:  
  s.accept()  
  i += 1  
  print i  

并将目标端口更改为5555。 唯一想到的是套接字可能正在关闭,但我不知道为什么会这样。还有什么能阻止这个脚本工作吗?

0 个答案:

没有答案