前因
同事之前项目需求:客户现场一直使用ftp,因客户现场环境问题,客户提出使用sftp替换ftp;同事一直使用sftp 命令连接,我说你可以使用ssh直接登上系统查看不是更方便。同事来了句,ssh可能被限制,只能使用sftp访问。我当时就蒙了,没好意思说,因为我的印象中sftp是依赖于sshd服务的,和sshd端口一样,如果用户限制登录系统,sftp怎么可能可以使用。我直接使用客户提供的sftp用户密码,使用ssh命令登录了。
之后想了下,系统内开启ssh服务和sftp服务都是通过/usr/sbin/sshd这个后台程序监听22端口,而sftp服务作为一个子服务,是通过/etc/ssh/sshd_config配置文件中的Subsystem实现的,如果没有配置Subsystem参数,则系统是不能进行sftp访问的。sftp是ssh的一部分,sftp没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,sftp并不像是一个服务器程序,而更像是一个客户端程序。那么如果使用sftp来模拟ssh,变相的从ssh中分离处理,当然不是真的分离。这样不就实现了ssh和sftp分离了吗?
简单整理了一下,脚本下载地址,请联系我VX:wangjianxiong000834(一元红包,非诚勿扰,备注下需要的脚本。如有需求亦可开发(shell,python,java))。
脚本实现
查看服务端口:
实现ssh和sftp分离:
查看脚本帮助文档:
执行脚本实现ssh和sftp服务分离:
查看端口:
默认会创建sftpd服务用户:
用户名:sftpuser
密码:sftpuser
如果你想创建自己的sftpd服务用户,可执行脚本创建。-u 用户名 -p 密码 -d 用户的家目录位置(最好不要写已经存在的目录)。
测试
测试sftpd,使用sftp可以登录:
测试sshd,使用ssh不能登录:
查看sshd和sftpd的服务状态: