SSH 客户端拒绝连接并出现错误“打开的文件太多”

SSH 客户端拒绝连接并出现错误“打开的文件太多”

在计算机上运行反向 ssh 客户端。一段时间后收到连接被拒绝的请求,ssh 客户端上的日志表明

10 月 12 日 00:21:19 ipaserver0 reverse-tunnel.sh:debug3:通道 1018:等待连接

10 月 12 日 00:21:19 ipaserver0 reverse-tunnel.sh:debug1:通道 1018:连接失败:连接被拒绝

10 月 12 日 00:21:19 ipaserver0 reverse-tunnel.sh:套接字:打开的文件太多

不确定这里的问题是什么。 ssh 隧道可支持的通道数量是否有限制。

答案1

进程可以打开的文件描述符的数量是有限制的。 ssh 隧道在客户端和服务器端都需要一个用于连接的文件描述符。因此通道的数量是有限的。

在 Linux 上,您可以使用lsof列出打开的文件。它将列出所有进程的文件。您可以使用-c ssh命令名称或-p pid特定进程来限制列出的进程。

答案2

我也遇到同样的情况。
只需注意服务器端和客户端都应设置打开文件限制。
如果有端口转发,转发过程也需要设置。

ssh转发进程

例如,如果 host0 运行

ssh -fNL :1234:host2:1234  host1

然后你就得到了流程

  • ssh @host0
    //sudo netstat -ltnp | sudo netstat -ltnp | ssh @host0 //sudo netstat -ltnp | ssh @host0正则表达式:1234
  • sshd @host1
    //sudo netstat -atnp | sshd @host1 //sudo netstat -atnp | sshd @host1 grep :1234 (连接后运行
    //pgrep -af "sshd: $USER\s*$"

拓扑结构:

client ----> ssh ===tunnel=== sshd ----> server

ssh (-L,-R)正向运行在应用层,
每个连接需要一个tcp socket fd。

// 对于大量连接来说它的性能很低。

用于运行过程

检查 NOFILE 限制:

$ prlimit -p 1930 -n
RESOURCE DESCRIPTION                 SOFT    HARD UNITS
NOFILE   max number of open files 1048576 1048576 files

更改 NOFILE 限制

prlimit -p 1930 -n1048576

对于当前的交互式 bash

查看

$ ulimit -n
1024

改变

ulimit -n 1048576

相关内容