1、创建sftp组
groupadd sftpgroup
2、创建测试用户,并设置解释器为/sbin/nologin
useradd -g sftpgroup -s /sbin/nologin sftp-user1
3、给测试用户设置密码
passwd sftp-user1
4、创建数据目录
mkdir -p /data/sftp/sftp-user1
5、设置测试账户访问目录的权限
usermod -d /data/sftp/sftp-user1 sftp-user1
6、设置ssh配置文件
vi /etc/ssh/sshd_config
......
# Subsystem sftp /usr/libexec/openssh/sftp-server ###注释掉该行
......
在末尾添加以下内容
Subsystem sftp internal-sftp
Match Group sftpgroup
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
......
7、修改测试用户目录的所有者和所属组,家目录设置为root:sftp
注意!注意!注意!/data/sftp/sftp-user1权限不要设置为sftp-user1:sftp
chown root:sftpgroup /data/sftp/sftp-user1
8、给测试用户sftp-user1目录设置755权限
chmod 755 /data/sftp/sftp-user1
9、创建测试目录
mkdir /data/sftp/sftp-user1/test
10、修改测试目录的所有者和所属组,, 测试用户目录的子目录test设置为sftp-user1:sftp
chown sftp-user1:sftpgroup /data/sftp/sftp-user1/test
11、测试目录设置权限
chmod 755 /data/sftp/sftpt-user1/test
12、关闭防火墙
systemctl stop firewalld
13、关闭防火墙开机启动
systemctl disable firewalld
14、关闭selinux
vi /etc/selinux/config
......
SELINUX=disabled
......
15、重启ssh服务
systemctl restart sshd
16、测试登录
sftp -P22 sftp-user1@sftp服务器地址
三、常用命令
1、使用命令?或者help可以查看命令帮助信息,如下:
sftp> ?
Available commands:
bye 退出 sftp
cd path 更改远程目录到 'path'
chgrp [-h] grp path 将文件 'path' 的组更改为 'grp'
chmod [-h] mode path 将文件 'path' 的权限更改为 'mode'
chown [-h] own path 将文件 'path' 的属主更改为 'own'
df [-hi] [path] 显示当前目录的统计信息或包含 'path' 的文件系统
exit 退出 sftp
get [-afpR] remote [local] 下载文件
help 显示这个帮助文本
lcd path 更改本地目录到 'path'
lls [ls-options [path]] 显示本地目录列表
lmkdir path 创建本地目录
ln [-s] oldpath newpath 符号链接远程文件
lpwd 显示本地工作目录
ls [-1afhlnrSt] [path] 显示远程目录列表
lumask umask 将本地umask设置为 'umask'
mkdir path 创建远程目录
progress 切换是否显示文件传输进度
put [-afpR] local [remote] 上传文件
pwd 显示远程工作目录
quit 退出 sftp
reget [-fpR] remote [local] 恢复下载文件
rename oldpath newpath 重命名远程文件
reput [-fpR] local [remote] 恢复上传文件
rm path 删除远程文件
rmdir path 删除远程目录
symlink oldpath newpath 符号链接远程文件
version 显示 SFTP 版本信息
!command 在本地shell中执行 'command'
! 启动本地shell
? 帮助信息
sftp>
2、退出
退出命令有3个,直接输入一个回车即断开sftp连接
bye quit exit
3、pwd和lpwd
pwd是看远端服务器的目录, 即sftp服务器默认的当前目录
lpwd是看linux本地目录
4、ls和lls
ls是看sftp服务器下当前目录下的列表
lls是看linux当前目录下的列表
5、put a.txt
这个是把linux当前目录下的a.txt文件上传到sftp服务器的当前目录下。
```bash
sftp> put /home/test.txt
Uploading /home/test.txt to /home/test.txt
/home/test.txt 100% 0 0.0KB/s 00:00
sftp> ls
Desktop Documents Downloads IOSAPP Pictures
Templates config.json derby.log fontconfig hello
nohup.out share test.txt
sftp>
6、get
这个是把sftp服务器的文件下载到linux当前目录下
sftp> get /home/hello
Fetching /home/hello to hello
/home/hello 100% 174 45.4KB/s 00:00
sftp>
7、!command
这个是指在linux上执行command这个命令, 比如!ls是列举linux当前目录下的东东, !rm a.txt是删除linux当前目录下的a.txt文件。
这个命令非常非常有用, 因为在sftp> 后输入命令, 默认值针对sftp服务器的, 所以执行rm a.txt删除的是sftp服务器上的a.txt文件, 而非本地的linux上的a.txt文件。
sftp> ! w
10:27:39 up 2:07, 1 user, load average: 1.04, 1.38, 1.96
USER TTY 来自 LOGIN@ IDLE JCPU PCPU WHAT
kei :0 :0 08:20 ?xdm? 38:27 0.01s /usr/lib/gdm3/g
sftp>