1、SFTP描述

        SSH文件传输协议(英语:SSH File Transfer Protocol,也称Secret File Transfer Protocol,中文:安全文件传送协议,英文:Secure FTP或字母缩写:SFTP)是一种数据流连接,提供文件访问、传输和管理功能的网络传输协议

        SFTP可以为传输文件提供一种安全的加密方法,SFTP为SSH的一部分,采用的是SSH加密隧道,由于这种传输方式使用了加密/解密技术,安装性方面比FTP要强一些,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP

        SFTP与FTP有着几乎一样的语法和功能,SFTP本身没有单独的守护进程,它必须使用sshd守护进程( 端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序

        SFTP依赖的是系统自带的SSH服务,不像FTP还需要额外的进行安装(vsftp服务), SFTP是只要确保你的Linux 账号能连接,SFTP默认连接账号就是Linux root账号和密码。

部署前:

 

容器内sftp端口不能在sftp开吗_linux

 

  1. 开始部署

 查看ssh 服务版本:

 命令:ssh -V       注意:V是大写

 

容器内sftp端口不能在sftp开吗_重启_02

 

①自定义创建一个目录,用于sftp 访问的目录路径,并且创建一个不能登陆的sftpuser用户,用于登陆 sftp 服务。

新建用户sftpuser,并且设置不支持ssh系统登录,只能登录sftp服务器

-g 用户组; -d 指定家目录; -s 不能登陆系统; -M 不创建家目录

容器内sftp端口不能在sftp开吗_容器内sftp端口不能在sftp开吗_03

查看文件权限

容器内sftp端口不能在sftp开吗_容器内sftp端口不能在sftp开吗_04

修改文件所属组和权限

 

容器内sftp端口不能在sftp开吗_服务器_05

 

3.配置ssh 和 sftp 服务

修改任何配置文件,养成先备份的习惯。

容器内sftp端口不能在sftp开吗_服务器_06

 

 

使用vim 编辑sshd_config文件

容器内sftp端口不能在sftp开吗_linux_07

 

 

配置文件未修改前

容器内sftp端口不能在sftp开吗_服务器_08

  

修改后,上面我们创建的用户是sftpuser 和默认的sftpuser组别,这里需要根据实际情况书写

容器内sftp端口不能在sftp开吗_ssh_09

 

保存,退出,重启ssh 服务

容器内sftp端口不能在sftp开吗_服务器_10

 

firewall-cmd --list-all             # 查看已开放的端口

firewall-cmd --permanent --zone=public --add-port=22/tcp    # 开通sftp服务22默认端口

firewall-cmd --reload                                       # 刷新防火墙,重新载入

容器内sftp端口不能在sftp开吗_linux_11

 

测试,这里使用Sftp软

容器内sftp端口不能在sftp开吗_linux_12

件,同类型软件即可~

 

容器内sftp端口不能在sftp开吗_容器内sftp端口不能在sftp开吗_13

容器内sftp端口不能在sftp开吗_ssh_14

 

容器内sftp端口不能在sftp开吗_linux_15

 

 

成功

容器内sftp端口不能在sftp开吗_linux_16

容器内sftp端口不能在sftp开吗_ssh_17

 

 

查看ssh 服务的进程

容器内sftp端口不能在sftp开吗_ssh_18

 

通过sftp服务验证,本机连接本机的SFTP,也可以其他机器~

容器内sftp端口不能在sftp开吗_ssh_19

 

部署过程可能会出现,如图访问不了的情况,在IP和账户密码正确的情况下。

容器内sftp端口不能在sftp开吗_容器内sftp端口不能在sftp开吗_20

容器内sftp端口不能在sftp开吗_linux_21

 

截止这里,SFTP部署完成

高阶部分

注销了subsystem就提示如下报错

sftp,是ssh的功能之一,也就是说是使用SSH协议来传输文件的。OS系统内开启ssh服务和sftp服务都是通过/usr/sbin/sshd这个后台程序监听22端口,而sftp服务作为一个子服务,是通过/etc/ssh/sshd_config配置文件中的Subsystem实现的,如果没有配置Subsystem参数,则系统是不能进行sftp访问的。

 

容器内sftp端口不能在sftp开吗_容器内sftp端口不能在sftp开吗_22

 

SSH和SFTP服务监听端口分离

步骤:

拷贝/usr/lib/systemd/system/目录下的sshd.service文件,放到/etc/systemd/system/目录下,命名为sftpd.service

cp /usr/lib/systemd/system/sshd.service  /etc/systemd/system/sftpd.service

容器内sftp端口不能在sftp开吗_linux_23

 

 

2. 拷贝/etc/pam.d/目录下的sshd文件,放到同目录,命名为sftpd

cp /etc/pam.d/sshd  /etc/pam.d/sftpd

容器内sftp端口不能在sftp开吗_ssh_24

 

容器内sftp端口不能在sftp开吗_ssh_25

 

拷贝/etc/ssh/目录下的sshd_config文件,放到同目录,命名为sftpd_config 

cp /etc/ssh/sshd_config  /etc/ssh/sftpd_config

容器内sftp端口不能在sftp开吗_linux_26

 

对service和rcsftpd进行软连接 

ln -sf  /usr/sbin/service  /usr/sbin/rcsftpd

容器内sftp端口不能在sftp开吗_linux_27

 

对sshd和sftpd进行软连接 

ln -sf  /usr/sbin/sshd  /usr/sbin/sftpd

容器内sftp端口不能在sftp开吗_linux_28

 

拷贝/etc/sysconfig/目录下的sshd文件,放到同目录,命名为sftp

cp /etc/sysconfig/sshd  /etc/sysconfig/sftp

容器内sftp端口不能在sftp开吗_重启_29

 

容器内sftp端口不能在sftp开吗_服务器_30

 

拷贝/var/run/目录下的sshd.pid文件,放到同目录,命名为sftpd.pid 

cp /var/run/sshd.pid  /var/run/sftpd.pid

容器内sftp端口不能在sftp开吗_重启_31

 

修改/etc/systemd/system/目录下sftpd.service文件

修改前

容器内sftp端口不能在sftp开吗_重启_32

 修改后

容器内sftp端口不能在sftp开吗_linux_33

 

修改/etc/ssh/目录下的sftpd_config文件

容器内sftp端口不能在sftp开吗_容器内sftp端口不能在sftp开吗_34

 

容器内sftp端口不能在sftp开吗_ssh_35

 

清空/var/run/目录下的sftpd.pid文件内容,进程号

容器内sftp端口不能在sftp开吗_重启_36

 

禁止selinux

容器内sftp端口不能在sftp开吗_服务器_37

 

重启sftpd服务并添加自启动

systemctl daemon-reload

systemctl restart sftpd

systemctl enable sftpd

同上,测试,成功,注意需要打开对应的端口

容器内sftp端口不能在sftp开吗_服务器_38

 

关闭sftp 22端口的访问,修改sshd_config中的配置

容器内sftp端口不能在sftp开吗_服务器_39

 

重启服务,并且连接测试,报错,代表成功关闭~

容器内sftp端口不能在sftp开吗_服务器_40

 

软件测试

容器内sftp端口不能在sftp开吗_服务器_41