1. 首先看一下详细的错误信息
下面就贴出同事博客园老哥的一段错误解析
https://www.cnblogs.com/whatmiss/p/7068772.html
> Write failed: Broken pipe > Couldn't read packet: Connection reset by peer
这个问题的原因是ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是 750 或者 755。注意以下两点原则:
-
目录开始一直往上到系统根目录为止的目录拥有者都只能是 root,用户组可以不是 root。
-
目录开始一直往上到系统根目录为止都不可以具有群组写入权限
- 上面2点一定注意,仔细检查。我就是因为这个问题,导致一直有这个问题。仔细检查配置后,解决问题。
当时初看到解析的时候因为不太清楚linux中的用户组和用户名到底是什么,也配置过目录的权限,所以当时我认为是第二种原因。其实不然
2. 问题分析解决
我找了好多的网站解决这个问题,大部分都是驴唇不对马嘴。
其实就是用户组的问题,也就是第一种,配置sftp的配置文件中有一个chrootDirectory的项,这里填写的路劲一定是要在root用户名下的路径
当你发现你的共享目录的父级目录和自己的子目录用户名和权限不一致的时候,一定要去更改。
举个例子更改用户组和用户名的例子 比如这里我要把share文件夹改成sftp用户组下的root用户,我就要这样执行
chown -R root.root share