SFTP搭建
【前言】
前段时间被告知需要搭建一个sftp,用来和tob客户进行文件传递,虽然不是很紧急,但是最终还是得弄出来,由于最近一直在忙另外两个项目,一直没时间搞,直到这两天稍微有点时间,之前确实仅仅局限于了解,并没有动手搭建,估记录一下。
【SFTP简介】
各位看官老爷对FTP应该不陌生吧,文件传输协议,TCP/IP协议簇之一,用来进行双向传输文件,前端时间刚刚写过HTTP和HTTPS,那么FTP和SFTP是不是也是一样呢,多了个安全相关的东西。没错,你猜对了,百度曰:SSH文件传输协议(英语:SSH File Transfer Protocol,也称Secret File Transfer Protocol,中文:安全文件传送协议,英文:Secure FTP或字母缩写:SFTP)是一数据流连接,提供文件访问、传输和管理功能的网络传输协议。跟HTTPS类似,SFTP它也是通过加密和解密来保证传输文件的安全的。
SFTP和FTP的功能和使用的参数几乎一毛一样,你说它属于SSH软件也是合理的,它并没有属于自己的守护进程,它使用的守护进程当然是SSH的,通过SSH的端口(默认22,建议修改为其他端口)来进行连接和文件传输的。当然,你得知道一点,因为在传输过程中需要进行加密解密,自然传输效率是不如FTP的,所以使用哪个传输方式需要依据实际情况斟酌斟酌。
【SFTP搭建】
本文配置环境
CentOS Linux release 7.6.1810 (Core)
Linux VM171-test-ng_proxy 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
1、关闭防火墙等限制,如果你在公司内部,需要给外部开放的话,配置对应公司内的防火墙即可,服务器防火墙等还是需要清除的
# 关闭firewalld
systemctl stop firewalld && systemctl disable firewalld
# 临时关闭selinux
setenforce 0
# 配置永久关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 清除iptables规则
iptables -t -nat -F
iptables -F
2、确定openssh版本,需要大于4.8pl
[root@VM171-test-ng_proxy ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
3、创建组
sudo groupadd hobby
4、创建用户这里我创建的用户和组都为hobby,如果说这个用户仅仅是为了文件传输,这里是不建议给登陆权限的,加入-s /sbin/nologin参数即可
sudo useradd -g hobby -s /sbin/nologin hobby
5、配置密码
passwd hobby
6、创建用户进行传输的目录并设置权限
mkdir -p /chroot/hobby
chmod -R 755 /chroot/hobby
# 如果不允许hobby用户上传,就将/chroot/hobby用户为root
chogrp -R hobby /chroot/hobby
# 如果允许此上传文件,就将此目录用户和组都设置为hobby
chown -R hobby. /chroot/hobby
7、修改配置文件sshd_config
sudo vim /etc/ssh/sshd_config
找到下面这一行,将其注释掉,即在行首添加#
# Subsystem sftp /usr/libexec/openssh/sftp-server
然后添加下面这几行
Subsystem sftp internal-sftp
Match user hobby
ChrootDirectory /chroot/hobby
ForceCommand internal-sftp
# Match此处填写需要使用sftp的用户组,指定以下行仅仅匹配hobby组中的用户
# ChrootDirectory填写进行文件传输的目录的绝对路径
# ForceCommand表示强制执行内部的sftp,并忽略~/.ssh/rc中的命令
7、重启ssh服务
systemctl restart sshd
至此配置就完成了,接下来进行测试
sftp [email protected]
拉取sftp服务器端文件
【SFTP常用命令】
我这里就只讲几个常用的命令
help 顾名思义,用来查看sftp支持哪些命令
pwd 查看SFTP服务器目录
lpwd 查看本地当前目录
ls 查看SFTP服务器当前目录下的文件
lls 查看本地当前目录下的文件
put file 将本地当前目录下的file文件上传至SFTP服务器当前目录下
get file 将SFTP服务器当前目录下的file文件下载到本地当前目录
!command 在本地linux指向command命令,比如!rm file是删除本地linux当前目录下的file文件,因为在sftp>后输入的命令,默认是对SFTP服务器进行操作,所以sftp> rm file是删除SFTP服务器当前目录的file文件
exit 退出
总而言之呢,如果你不记得有什么命令了,那就用help查看吧