1、新建sftp用户组 && sftp 用户家目录
groupadd sftp
mkdir -p /sftpdata/sftp/
2、新建sftp用户
useradd -d /sftpdata/sftp/tester -m -g sftp -s /sbin/nologin tester
passwd tester
3、赋权
PS: tester 属主为root(必须),属组为sftp(必须),权限不大于755
chown root:sftp -R /sftpdata/sftp/tester
chmod 755 /sftpdata/sftp/tester
4、设置可以写入的目录
PS:upload属主属组也固定,如下
mkdir /sftpdata/sftp/tester/upload
chown tester:sftp /sftpdata/sftp/tester/upload
chmod 755 /sftpdata/sftp/tester/upload
6、配置sshd_config
vim /etc/ssh/sshd_config
# 注释:Subsystem sftp /usr/libexec/openssh/sftp-server
# 追加下面内容
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /sftpdata/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
重启ssh
systemctl restart sshd
7、测试
PS: ssh端口非22, -P $PORT
sftp -P 22 tester@192.168.199.201
8、自动上传脚本(放在客户端),需要lftp命令
#!/bin/bash
export PATH=$PATH:/sbin:/bin:/usr/local/sbin:/usr/local/bin
# SFTP服务器
IP=192.168.199.201
# 上传文件所在目录
SRCDIR=/var/log/
# 上传文件名字
FILENAME=secure
# SFTP目的目录,注意这个才是正确写法
DESDIR=/upload
# SFTP服务器的用户名&&密码&&端口
USER=tester
PASSWD="1"
PORT=22
lftp -u ${USER},${PASSWD} sftp://${IP}:${PORT} <<EOF
cd ${DESDIR}
lcd ${SRCDIR}
put ${FILENAME}
bye
EOF