报错
使用 SFTP 远程连接
登录:sftp sftpuser@191.168.123.100
报错:
client_loop: send disconnect: Broken pipe
Connection closed.
Connection closed
寻找错误
🔗参考链接:https://eternalcenter.com/debug-client_loop-send-disconnect-broken-pipe/
SFTP 目录的所属主必须是 root,权限最高只能是 755,否则就算此目录的所属主是此 SFTP 用户也会报错。
解决错误
步骤一:将 SFTP 目录的所属主设置为 root
例:chown root:sftpuser /home/sftp/tmsftp/
步骤二:将 SFTP 目录的权限设置为 755
例:chmod 755 /home/sftp/tmsftp
SFTP 账号创建
添加用户组和用户。(注意目录权限设置不正确会导致无法上传文件)
groupadd sftpuser
useradd -g sftpuser -s /bin/false tmsftp
passwd tmsftp #设置用户密码
设置用户密码永不过期chage -M 99999 -W 7 tmsftp
查看密码过期情况chage tmsftp -l
返回的结果类似以下:
Last password change : Jan 30, 2023
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
创建sftp的登录目录并设置权限和所属主
mkdir -p /home/sftp/tmsftp/files
chown root:root /home/sftp/
chown root:sftpuser /home/sftp/tmsftp/
chown tmsftp:sftpuser /home/sftp/tmsftp/files
chmod 755 /home/sftp/tmsftp
配置sshd_config
vim /etc/ssh/sshd_config
找到Subsystem sftp /usr/libexec/openssh/sftp-server
把它改为Subsystem sftp internal-sftp
然后在文件的最下面增加以下配置,注意“Match”以下的4个配置项,前面要加空格,表示它们是属于Match 这个配置的子配置项
Match Group sftpuser
ChrootDirectory /home/sftp/%u
ForceCommand internal-sftp -d /files
AllowTcpForwarding no
X11Forwarding no
注意:上面的“ForceCommand internal-sftp -d /files”中的/files指定了登录后的默认目录是/home/sftp/tmsftp/files,没有这个“-d”参数它默认是登录到/home/sftp/tmsftp,而由于目录权限设置的要求,不能把ChrootDirectory指向/home/sftp/tmsftp/files,因为它不满足ChrootDirectory对属主和属组是root:sftpuser的要求。
重启sshd
systemctl restart sshd
或service sshd restart
评论已关闭