CentOS 配置 sftp 服务

简介: CentOS 配置 sftp 服务

检查 openssh 版本

如果需要使用 ChrootDirectory 参数配置用户访问的默认路径,openssh 的版本不能低于 4.8
ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017

创建 sftp 用户

Linux 系统内已存在的用户,都是可以直接使用 sftp 服务,创建用户是为了一些特殊的场景使用,做一些区分

for-sftp 用户的登录 shell 指定为 /sbin/nologin ,不让 for-sftp 用户可以通过 ssh 命令登录到服务器

useradd for-sftp -s /sbin/nologin
for-sftp 用户设置密码
echo for-sftp | passwd --stdin for-sftp

配置 sftp

多备份,少跑路
cp /etc/ssh/sshd_config{,.bak}
可以直接过滤 sftp 关键字
# 注释掉下面的这行内容,因为配置的 for-sftp 用户没有登录 shell 的权限
## 不注释的话,登录的时候会返回报错:Received message too long 1416128883
# Subsystem sftp /usr/libexec/openssh/sftp-server
# 修改成下面的方式来打开 sftp 服务
Subsystem sftp internal-sftp
# Match User 后面的配置内容,只对 Match User 指定的用户生效,多个用户以逗号分隔
## 也可以配置成 Match Group,对指定的组生效,同样,多个组以逗号分隔
Match User for-sftp
# 指定 sftp 登录的默认路径
## 目录必须存在,否则 sftp 连接会报错
ChrootDirectory /data/sftp
# 指定 sftp 命令
ForceCommand internal-sftp
  • 配置了 ChrootDirectory 时,sftp 对于 ChrootDirectory 目录的权限要求比较死

    • 不允许 ChrootDirectory属组有写入权限,也就是最高只支持 750755 两种权限
    • ChrootDirectory属主必须是 root 用户

      • 不满足以上两种条件时,用 for-sftp 用户登录 sftp 会报错:

        • packet_write_wait: Connection to <ip地址> port 22: Broken pipe
        • Couldn't read packet: Connection reset by peer

重启 sshd 服务

重启 sshd 服务才能使 sftp 配置生效
systemctl restart sshd

如果出现了以下报错

Directive 'Protocol' is not allowed within a Match block

那说明 /etc/ssh/sshd_config 配置文件内开了 Protocol 这个配置,需要把 sftp 相关的配置,移到 Protocol 后面几行就行,可以直接放到配置文件最后的地方,然后重启 sshd 服务就可以解决

创建 ChrootDirectory

  • -m 750 - 指定目录创建时的权限

    • -m 只会指定创建时的最后一级目录,不影响前面的父级目录
  • -p - 父级目录不存在时,创建父级目录
  • 要给 ChrootDirectory 配置一个 for-sftp 组的权限,否则 for-sftp 用户也没权限进入到自己有权限的路径下搞事情
mkdir /data/sftp -m 750 -p
chown root.for-sftp /data/sftp
sftp 配置了 ChrootDirectory 后,就只能查看文件,没办法上传文件,所以要在 ChrootDirectory 目录下在创建一个 for-sftp 用户有权限的路径,就可以上传文件了
mkdir /data/sftp/for-sftp
chown for-sftp.for-sftp /data/sftp/for-sftp

登录 sftp 搞事情

图省事,我就直接使用 localhost 了
sftp for-sftp@localhost
for-sftp@localhost's password:
Connected to localhost.
sftp> ls
for-sftp
sftp> cd for-sftp/
sftp> ls
sftp> put anaconda-ks.cfg
Uploading anaconda-ks.cfg to /for-sftp/anaconda-ks.cfg
anaconda-ks.cfg                                                      100% 1526     2.8MB/s   00:00
sftp> ls
anaconda-ks.cfg
然后我们就把本地的 anaconda-ks.cfg 文件上传到 sftp 服务器上了,当我们查看 ChrootDirectory 目录的 for-sftp 目录下就会有 anaconda-ks.cfg 这个文件了

sftp 常用命令

登录到 sftp 服务器之后,输入 help 就可以查看所有的命令了
Available commands:
# 退出 sftp
bye                                Quit sftp
# 进入到 sftp 内指定的路径
cd path                            Change remote directory to 'path'
# 修改 sftp 内指定路径的属租
chgrp grp path                     Change group of file 'path' to 'grp'
# 修改 sftp 内指定路径的权限 [ ugo 权限]
chmod mode path                    Change permissions of file 'path' to 'mode'
# 修改 sftp 内指定路径的所有者
chown own path                     Change owner of file 'path' to 'own'
# 查看 sftp 内指定路径的统计信息
df [-hi] [path]                    Display statistics for current directory or
                                   filesystem containing 'path'
# 退出 sftp
exit                               Quit sftp
# 从 sftp 下载文件到本地
get [-afPpRr] remote [local]       Download file
# 恢复下载
reget [-fPpRr] remote [local]      Resume download file
# 恢复上传
reput [-fPpRr] [local] remote      Resume upload file
# 查看帮助
help                               Display this help text
# 修改本地所在路径
lcd path                           Change local directory to 'path'
# 查看本地路径下的文件详情
lls [ls-options [path]]            Display local directory listing
# 本地创建路径
lmkdir path                        Create local directory
# 生成连接文件
ln [-s] oldpath newpath            Link remote file (-s for symlink)
# 显示本地所在路径
lpwd                               Print local working directory
# 同 linux 查看指定路径下有哪些文件
ls [-1afhlnrSt] [path]             Display remote directory listing
# 设置本地 umask
lumask umask                       Set local umask to 'umask'
# sftp 内创建目录
mkdir path                         Create remote directory
# 切换进度表的显示
progress                           Toggle display of progress meter
# 本地文件上传到 sftp 内
put [-afPpRr] local [remote]       Upload file
# 显示 sftp 内当前所在路径
pwd                                Display remote working directory
# 退出 sftp
quit                               Quit sftp
# sftp 内文件重命名
rename oldpath newpath             Rename remote file
# sftp 内删除文件
rm path                            Delete remote file
# sftp 内删除目录
rmdir path                         Remove remote directory
# 生成连接文件
symlink oldpath newpath            Symlink remote file
# 查看 sftp 版本
version                            Show SFTP version
# 在本地执行命令
!command                           Execute 'command' in local shell
# 逃到本地 [ 其实就是退出 sftp ]
!                                  Escape to local shell
# 显示帮助
?                                  Synonym for help
目录
相关文章
|
22天前
|
存储 Ubuntu 应用服务中间件
【Nginx】centos和Ubuntu操作系统下载Nginx配置文件并启动Nginx服务详解
【Nginx】centos和Ubuntu操作系统下载Nginx配置文件并启动Nginx服务详解
30 1
|
2天前
|
Linux
centos bond多网关配置 bond多网关路由
centos bond多网关配置 bond多网关路由
|
2天前
|
开发工具
centos8 yum安装mysql8 流程配置
centos8 yum安装mysql8 流程配置
|
9天前
|
NoSQL Linux Redis
Centos7 安装和配置 Redis 5 教程
在Centos上安装Redis 5,如果是 Centos8,那么 yum 仓库中默认的 redis 版本就是 5,直接 yum install 即可。
59 0
|
11天前
|
缓存 Linux 编译器
Linux(CentOS7.5) 安装部署 Python3.6(超详细!包含 Yum 源配置!)
该指南介绍了在Linux系统中配置Yum源和安装Python3的步骤。首先,通过`yum install`和`wget`命令更新和备份Yum源,并从阿里云获取CentOS和EPEL的repo文件。接着,清理和更新Yum缓存。然后,下载Python3源代码包,推荐使用阿里云镜像加速。解压后,安装必要的依赖,如gcc。在配置和编译Python3时,可能需要解决缺少C编译器的问题。完成安装后,创建Python3和pip3的软链接,并更新环境变量。最后,验证Python3安装成功,并可选地升级pip和配置pip源以提高包下载速度。
|
20天前
|
Shell Linux 应用服务中间件
centos系统内容器部署服务访问不到是因为run后面加了bash
centos系统内容器部署服务访问不到是因为run后面加了bash
|
22天前
|
NoSQL Linux Redis
在CentOS上安装和配置Redis
在CentOS上安装和配置Redis
107 0
|
22天前
|
存储 关系型数据库 Linux
CentOS如何使用Docker部署Plik服务并实现公网访问本地设备上传下载文件
CentOS如何使用Docker部署Plik服务并实现公网访问本地设备上传下载文件
41 4
|
22天前
|
Linux
CentOS 7 配置yum阿里源 (三步即可)
CentOS 7 配置yum阿里源 (三步即可)
420 1
|
22天前
|
XML JSON Java
【亮剑】在CentOS上搭建Solr 7单机服务的流程
【4月更文挑战第30天】本文介绍了在CentOS上搭建Solr 7单机服务的流程。首先确保系统安装Java,然后下载解压Solr 7压缩包,进入目录创建运行目录和日志目录,使用命令启动Solr服务。通过浏览器访问管理界面,创建Collection和Core。接着配置数据导入,创建`example_docs`文件夹存放数据,通过管理界面导入数据。最后进行查询测试,完成Solr的基本使用。