使用 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

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
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

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的要求。

systemctl restart sshd

service sshd restart