sftp连接服务器报client_loop: send disconnect: Broken pipe的问题分析

avatar
作者
筋斗云
阅读量:0

一、问题现象

sftp连接服务器报"client_loop: send disconnect: Broken pipe"错误,连接被服务器关闭,相关信息如下:

# sftp sftp_ppp@1192,168,1.106 sftp_ptn@10.193.217.106's password:  client_loop: send disconnect: Broken pipe Connection closed.   Connection closed

二、问题排查

检查后台日志,显示如下错误:

bad ownership or modes for chroot directory "/data/sftp_ppp"

三、报错分析

这个错误日志出现配置SFTP服务时,服务器侧chroot目录的所有权或权限设置的不正确。chroot目录是指SFTP会将用户限制在某个目录内,该目录被称为“根目录”(root directory)。所谓chroot,即change root directory(更改根目录),意味着SFTP会将用户的根目录更改为你指定的这个chroot目录。

问题出现的原因可能有:

  1. 目录的所有者不是root。

  2. 目录权限不合适,通常chroot目录的权限需要严格设置,只有root用户可以读写执行,其他用户不可访问通常是755或700)。

四、解决方法

以下步骤操作在服务器端进行操作:

1、检查权限

使用ls -ld 查看相关目录的所有权

# ll -ld /data      drwxr-xr-x. 28 root root 4.0K  4月 17 16:09 /data # ll -ld /data/sftp_ppp drwx------. 2 sftp_ppp sftp_ppp 109  5月 16 11:26 /data/sftp_ppp
2、结果分析

本例/data/sftp_ppp目录为提供给sftp_ppp用户数据目录,如上检查发现/data为root用户所有,权限755,满足要求,sftp_ppp目录属主为sftp_ppp用户,权限为775,作为chroot目录不满足要求。因此需新增chroot目录,把用户数据目录移到其下,并调整权限:

# mkdir -p /data/home # chown root:root /data/home && chmod 755 /data/home # mv /data/sftp_ppp /data/home # chmod 755 /data/home/sftp_ppp # 或 chmod 700 /data/home/sftp_ppp # chown sftp_ppp:sftp_ppp /data/home/sftp_ppp -R
3、配置SFTP服务器

在SFTP服务器etc/ssh/sshd_config中如下进行配置:

Match User sftp_ppp 
ChrootDirectory /home/data
ForceCommand internal-sftp 
AllowTcpForwarding no 
X11Forwarding no

用户登录以后,在/sftp_ppp目录中进行数据存取。

4、重启SFTP服务器

更改配置后需要重启服务器SSHD服务以使更改生效。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!