sftp、ssh连接提示client_loop: send disconnect: Broken pipe Connection closed. Connection clos

文章主要介绍了如何处理sftp、ssh连接错误,如Brokenpipe和无法切换用户的问题,这通常是由于资源限制导致。通过查看和调整用户资源限制,如使用ulimit、统计进程和文件打开数,以及修改/etc/security/limits.d/90-nproc.conf文件来增加用户进程数的软限制。此外,对比了系统级的pid_max参数和用户级的nproc.conf配置在进程管理上的不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、报错提示

sftp、ssh提示:
client_loop: send disconnect: Broken pipe
Connection closed. 
Connection clos
su -提示:
su: cannot set user id: Resource temporarily unavailable

二、问题处理

#资源限制查看
#查看当前用户资源限制
ulimit -a
#统计用户进程开启数
ps -ef |grep username | wc -l
#统计用户文件打开数
lsof | grep username | wc -l
#修改用于限制用户能够同时运行的最大进程数
vim /etc/security/limits.d/90-nproc.conf
#soft 表示软限制,当达到软限制时会给出警告,但允许继续创建新的进程。hard 表示硬限制,达到硬限制时将禁止创建新的进程。
#将soft nproc的值从1024改为4096
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
 
*          soft    nproc     4096
root       soft    nproc     unlimited

三、/etc/security/limits.d/90-nproc.conf和/proc/sys/kernel/pid_max配置文件的区别

/proc/sys/kernel/pid_max是一个系统内核参数,用于设置系统可以分配的最大进程ID(PID)数。每个新创建的进程都会被分配一个唯一的PID,该值决定了系统能够支持的最大进程数量。

/etc/security/limits.d/90-nproc.conf是一个配置文件,用于设定每个用户或用户组在系统中可同时运行的最大进程数。它是通过软件层面的限制来控制进程的数量,以确保资源分配合理、防止过度占用系统资源等。

区别在于:

1、/proc/sys/kernel/pid_max 是系统级别的设置,影响整个操作系统的进程数量。而 /etc/security/limits.d/90-nproc.conf 是针对每个用户或用户组的个别限制,用于限制特定用户或组的进程数量。
2、/proc/sys/kernel/pid_max 设置的是所有进程的上限,包括系统进程和用户进程,而 /etc/security/limits.d/90-nproc.conf 只限制用户进程的数量。/3、/proc/sys/kernel/pid_max 的修改需要超级用户权限,而 /etc/security/limits.d/90-nproc.conf 的修改通常由系统管理员或具有适当权限的用户进行。

综上所述,/proc/sys/kernel/pid_max 通过设置进程ID的上限来控制系统的整体进程数量,而 /etc/security/limits.d/90-nproc.conf 则是通过限制每个用户或用户组的进程数量来进行资源管理。

### SFTP 连接中断问题解决方案 SFTP 是基于 SSH 的文件传输协议,提供了安全的网络加密方式来传输数据。当遇到 `client_loop: send disconnect` 或者 `Connection reset closed` 类型的问题时,通常是由多种原因引起的,包括但不限于网络不稳定、服务器配置不当或者客户端设置不匹配。 以下是针对该类问题的具体解决措施: #### 1. 增加超时时间 如果由于长时间无操作导致连接被关闭,则可以通过增加超时时间和启用保持活动功能来解决问题。在客户端命令中加入 `-o ServerAliveInterval=60 -o TCPKeepAlive=yes` 参数可以有效防止因闲置而断开连接[^1]。 ```bash sftp -o ServerAliveInterval=60 -o TCPKeepAlive=yes user@hostname ``` #### 2. 调整缓冲区大小 对于大文件上传或下载过程中发生的 `Broken pipe` 错误,可能是因为默认的缓冲区不足以支持大数据流处理。尝试调整 Git 配置中的 postBuffer 大小以适应更大的数据包需求[^2]: ```bash git config --global http.postBuffer 524288000 ``` 尽管此配置主要用于 HTTP/HTTPS 协议下的克隆操作, 对于某些实现也可能间接影响到通过 ssh 执行的大规模数据交换行为. #### 3. 修改服务端参数 确认远程主机上的 `/etc/ssh/sshd_config` 文件是否存在可能导致频繁掉线的相关设定项。例如: - 设置 `ClientAliveInterval` 和 `ClientAliveCountMax`, 定期向客户端发送探测消息确保会话存活. ```conf ClientAliveInterval 60 ClientAliveCountMax 3 ``` - 如果启用了防火墙规则, 则需验证是否有策略阻止长期未活跃状态下的链接维持.[^3] 完成修改之后记得重启 sshd 服务使更改生效: ```bash sudo systemctl restart sshd ``` #### 4. 使用更稳定的网络环境 排除本地网络波动因素也是重要的一环。切换至更加可靠的互联网接入手段(比如有线代替无线), 并测试不同时间段内的稳定性表现差异. --- ### 总结 上述方法涵盖了从优化双方通信机制到改善外部条件等多个角度出发应对 sftp 断连现象的技术途径。实际应用当中可根据具体情况组合采用以上建议直至找到最适配当前场景的最佳实践方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值