把闲置的笔记本用来搭建了服务器,想弄个媒体服务器,给家人在局域网看电影或电视剧,一直没找到用什么方式把这些大的视频文件传到服务器上,同时还能管理服务器的其他文件。
原本是想用网盘来管理,但还是觉得麻烦,并且不知道能不能支持断点续传,毕竟有两百多个G,这文件又多,体积也不小。
然而,就在最近折腾电视盒子的时候发现SFTP蛮好用的,于是就想在CentOS的服务器上也安装SFTP了。
国际惯例,先度娘,查找资料。
根据资料显示,SFTP属于SSH里面的一项功能,如果没有安装SSH的话,需要先安装,然后才能安装SFTP功能。虽然我这台服务器已经安装了SSH,但是想了想,还是记录下来,以后如果重新部署服务器的话,还是能用上的。
先用命令查看SSH是否安安装,用的是查看SSH版本信息的命令:
ssh -V
要注意参数-V,这个V是大写的,因为LINUX对大小写敏感,所以不管做什么,都要区分大小写。执行完这个命令之后,如果显示如下版本信息,就说明SSH是已经安装好了的:
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
我这版本还是挺新的,7.4p1,如果版本低于4.8p1就需要升级。
执行下面的命令,查看SSH都安装了哪些软件包:
rpm -qa|grep openssh*
如果显示下面的内容,就说明已经安装了:
openssh-clients-7.4p1-22.el7_9.x86_64 openssl-devel-1.0.2k-25.el7_9.x86_64 bt-openssl102-1.0.2u-1.el7.x86_64 openssh-server-7.4p1-22.el7_9.x86_64 openssh-7.4p1-22.el7_9.x86_64 openssl-libs-1.0.2k-25.el7_9.x86_64 openssl-1.0.2k-25.el7_9.x86_64
这个命令我也不知道是不是必须的,个人觉得应该不是必须的,只是稳妥起见,如果不确定是否安装了SSH的话,就用这个命令来查询一下。
不知道为啥,我查询出来的软件包信息和网上大佬查询出来的略微有点不一样。
我用Putty始终无法连接SSH,不知道是不是没有安装好。
如果SSH没有安装的话,就要执行安装命令:
yum install -y openssl* openssh*
或者用这个命令也可以:
yum install -y openssl openssh-server
将SSH服务设为开机启动:
systemctl enable sshd.service
再执行启动命令,运行SSH服务:
systemctl start sshd.service
另外,附加一些常用命令:
systemctl stop sshd.service #停止SSH服务 systemctl restart sshd.service #重启SSH服务 systemctl status sshd.service #查看SSH服务状态 systemctl enable sshd.service #设置开机启动 systemctl disable sshd.service #禁止开机启动 yum remove -y openssh* #卸载SSH
接下来就要开始安装SFTP服务了。先要创建SFTP用户目录,在/data目录下创建一个名为sftp目录:
mkdir -p /data/sftp
将目录进行授权,权限是755,可读写:
chmod 755 /data/sftp
修改目录所属用户和用户组:
chown root:root /data/sftp
上面的命令意思是这个sftp目录权限所属的用户为root用户,所属的用户组也为root用户组,也就是说只有root用户才有权限对这个文件夹进行读写操作。
接下来创建SFTP用户组:
groupadd sftp
创建sftpuser用户,并且设置为无法常规登陆:
useradd -g sftp -d /data/sftp -M -s /sbin/nologin sftpuser
上面的命令意思是:新建用户sftpuser,并且设置不支持ssh系统登录,只能登录sftp服务器。
相关参数如下:
-g #用户组 -d #指定家目录 -M #不创建家目录 -s #不能登陆系统
接下来再创建SFTP用户可写目录:
mkdir -p /data/sftp/uploads
修改目录所属用户和用户组:
chown sftpuser:sftp /data/sftp/uploads
目录权限修改为755:
chmod 755 /data/sftp/uploads
配置SSH和SFTP服务器。
防止修改出现问题,先把配置文件备份一下,备份是个好习惯,需要慢慢养成。
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
执行完之后,为了保险起见,可以cd进入ssh目录看一下是否备份成功,是不是有这个sshd_config.backup的文件。
cd /etc/ssh ls
配置SSH
vi /etc/ssh/sshd_config
修改配置文件中的以下几项,一般来说,默认也是下面的内容,如果没有就添加进去,如果有的话就跳过。
PermitRootLogin yes RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
配置SFTP
vi /etc/ssh/sshd_config
注释掉这一行:
Subsystem sftp /usr/libexec/openssh/sftp-server
在文件末尾添加下面的内容,最后两项与安全有关:
Subsystem sftp internal-sftp Match Group sftp ChrootDirectory /data/sftp/%u ForceCommand internal-sftp AlloTcpForwarding no X11Forwarding no
如果在安装SFTP之前有关闭防火墙的话,还需要重启并配置防火墙,没有关闭防火墙,并且已经开放了22端口的话可以跳过:
systemctl enable firewalld.service systemctl restart firewalld.service firewall-cmd --version firewall-cmd --list-all firewall-cmd --permanent --zone=public --add-port=22/tcp firewall-cmd --reload
上面的命令前两句是设置开机启动防火墙和重启防火墙。后面的firewall-cmd命令就是防火墙的操作命令。
--version 是查看版本信息
--list-all 是查看已开放的端口
--permanent --zone=public --add-port=22/tcp 是开放22端口
--reload 是刷新防火墙重新载入配置,使开放的端口生效
除了防火墙,还要关闭selinux策略:
setsebool -P ftpd_full_access on sed -i s#enforcing#disabled#g /etc/sysconfig/selinux setenforce 0 && getenforce getenforce
selinux的这一段我就不懂了,抽空查下资料为什么要执行这些命令。
最后重启SFTP服务:
systemctl restart sshd.service
到这里,SFTP服务就搭建完成了。通过windows上的FTP客户端就可以连接,并传输文件了。
而实际上操作到最后这一项,重启SFTP服务的时候,却报错了,无法重启,执行:
journalctl -xe
发现是配置文件中有错误的配置。部分提示如下:
12月 15 16:11:01 localhost.localdomain sshd[18090]: /etc/ssh/sshd_config line 42: Deprecated option RSAAuthentication 12月 15 16:11:01 localhost.localdomain sshd[18090]: /etc/ssh/sshd_config: line 148: Bad configuration option: AlloTcpForwarding 12月 15 16:11:01 localhost.localdomain sshd[18090]: /etc/ssh/sshd_config line 148: Directive 'AlloTcpForwarding' is not allowed within a Match block 12月 15 16:11:01 localhost.localdomain systemd[1]: sshd.service: main process exited, code=exited, status=255/n/a 12月 15 16:11:01 localhost.localdomain systemd[1]: Failed to start OpenSSH server daemon.
查了一下资料,发现第一条错误提示:Deprecated option RSAAuthentication的原因是CentOS7.4相对于之前版本,做了一些与sshd相关的安全更新来加强sshd的安全性。其中之一就是弃用RSAAuthentication支持。也就是这一项配置不用写入到配置文件中了,添加进去了就会提示Deprecated option.
重新编辑sshd_config文件,删除RSAAuthentication这一行配置,保存退出,重启还是报错,那是因为还有一处配置错误没有解决。就是AlloTcpForwarding的这一项。
再次执行以下命令:
journalctl -xe
错误提示只有:
12月 15 17:26:58 localhost.localdomain sshd[19288]: /etc/ssh/sshd_config: line 145: Bad configuration option: AlloTcpForwarding 12月 15 17:26:58 localhost.localdomain sshd[19288]: /etc/ssh/sshd_config line 145: Directive 'AlloTcpForwarding' is not allowed within a Match block 12月 15 17:26:58 localhost.localdomain systemd[1]: sshd.service: main process exited, code=exited, status=255/n/a 12月 15 17:26:58 localhost.localdomain systemd[1]: Failed to start OpenSSH server daemon.
RSAAuthentication这一项的错误提示没有了。只要解决AlloTcpForwarding这一项的错误就行了。
既然是配置文件错误了,那就找到没有错误的配置文件,进行对比后修改。刚好电视盒子里面的NAS系统有SFTP的功能,而且都是正常的,于是SFTP连接到盒子,把SSH的配置文件下载下来,打开之后对比现在CentOS里面的SSH配置文件,对比之后的结果让我震惊了。
首先是:RSAAuthentication yes 这一项不需要添加。
然后是:Subsystem sftp /usr/libexec/openssh/sftp-server 这一行不用注释掉,如果有注释的话,删除前面的#号,让它生效。
最后一步,把之前文件末尾添加的内容全都删除,重启SSH服务,正常运行。
用FTP软件连接SFTP服务器,完全正常。
看来大佬写的文章也不一定全是对的,主要是时间过了那么久了,系统有些变化,配置不一样,需要根据实际情况来配置。
折腾到最后才发现,我安装的CentOS7.9默认就已经安装了SSH和SFTP服务,直接用就行了。算是白折腾了,涨了点经验而已。手动[捂脸]