一、提前准备

1.1 创建sftp组

1
groupadd sftp

1.2 创建用户并加入sftp组,设置密码

1
2
useradd -g sftp -s /bin/false testsftp
passwd testsftp

1.3 创建sftp目录并修改用户目录

1
2
3
4
mkdir -p /data/sftp/testsftp
chown -R testsftp:sftp /data/sftp/testsftp
chmod 755 /data/sftp/testsftp
usermod -d /data/sftp/testsftp testsftp

注意:目录权限一定要注意

二、配置sftp

2.1 修改配置文件

1
/etc/ssh/sshd_config

修改配置如下:

1
2
3
4
5
6
7
8
9
10
11
将如下行用#注释
Subsystem sftp /usr/libexec/openssh/sftp-server

添加以下内容
Subsystem sftp internal-sftp
Match User sftp
#指定sftp登录访问目录
ChrootDirectory /data/sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

2.2 重启ssh服务

1
systemctl restart sshd

三、测试与常用命令

3.1 验证sftp

1
2
3
sftp 用户名@ip
#如果不是默认22端口,需要指定端口
sftp -P port 用户名@ip

3.2 上传

1
2
3
4
5
6
7
8
#上传一个本地文件到远程目录
put local-file [remote-file]
#上传一个本地目录到远程目录
put -r local-dir [remote-file]
#上传多个本地文件(支持通配符*)到远程目录
mput local-files [remote-file]
#上传多个本地目录(支持通配符*)到远程目录
mput -r local-files [remote-file]

3.3 下载

1
2
3
4
5
6
7
8
#下载远程文件到本地目录
get remote-file [local-file]
#下载远程目录到本地目录
get -r remote-dir [local-file]
#下载多个远程文件(支持通配符*)到本地目录
mget remote-files [local-file]
#下载多个远程目录(支持通配符*)到本地目录
mget -r remote-dirs [local-file]

3.4 远程常规命令执行

1
2
3
4
5
6
#远程文件
rm [remote-files]
#进入远程目录
cd remote-directory
#修改远程文件属性
chmod mode file-name

3.5 执行本地命令

sftp登录后,若要执行本地命令,有两种方式

方式一,部分命令只需在常规命令前加l。如:

1
2
3
4
#查看当前目录,常规命令ls
lls
#查看当前路径,常规命令pwd
lpwd

方式二,在命令前加!,即格式为!command,如:

1
2
#在本地机器创建t.txt文件
!touch t.txt

3.6 查看帮助

1
2
3
4
#直接查看
man sftp
#登录sftp后查看
help