前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CentOS 配置ssh和sftp服务分离

CentOS 配置ssh和sftp服务分离

作者头像
IT小马哥
发布2023-09-02 18:48:30
6410
发布2023-09-02 18:48:30
举报
文章被收录于专栏:Java TaleJava Tale

实现原理

  1. 创建两个“sshd”进程,一个作为ssh服务的deamon,一个作为sftp服务的deamon。
  2. ssh服务和sftp服务分离之前: 系统内开启ssh服务和sftp服务都是通过/usr/sbin/sshd这个后台程序监听22端口,而sftp服务作为一个子服务,是通过/etc/ssh/sshd_config配置文件中的Subsystem实现的,如果没有配置Subsystem参数,则系统是不能通过sftp访问的。

操作步骤

创建两个deamon

代码语言:javascript
复制
ln -sf /usr/sbin/sshd /usr/sbin/sftpd

要实现ssh和sftp分离,分别监听不同的端口,可以通过创建两个‘/usr/sbin/sshd’后台程序,一个监听端口(ssh),一个监听10022端口(sftp),为了区分ssh和sftp服务的后台程序,这里将ssh服务的后台程序保持为/usr/sbin/sshd,而将sftp服务的后台程序改为/usr/sbin/sftpd。/usr/sbin/sftpd是/usr/sbin/sshd的一个链接,其内容完全相同。

创建两个service

代码语言:javascript
复制
cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/sftpd.service
代码语言:javascript
复制
CentOS使用systemd管理系统服务,ssh服务对应/usr/lib/systemd/system/sshd.service文件,实现sftp服务时可以将/usr/lib/systemd/system/sshd.service复制到/etc/systemd/system/sftpd.service,然后修改sftpd.service文件内容(使用修改好的sftpd.service文件即可)。

其他需要分离的文件

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

代码语言:javascript
复制
cp /etc/pam.d/sshd /etc/pam.d/sftpd

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

代码语言:javascript
复制
cp /etc/ssh/sshd_config /etc/ssh/sftpd_config

对service和rcsftpd进行软连接。

代码语言:javascript
复制
ln -sf /usr/sbin/service /usr/sbin/rcsftpd

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

代码语言:javascript
复制
cp /etc/sysconfig/sshd /etc/sysconfig/sftp

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

代码语言:javascript
复制
cp /var/run/sshd.pid /var/run/sftpd.pid

此时已经实现了ssh服务和sftp服务分离。但是,ssh服务和sftp服务并没有真正的分离,此时已然可以通过22号端口使用ssh服务和sftp服务。

编辑/usr/sbin/sshd的配置文件/etc/ssh/sshd_config,将Subsystem参数注释掉,然后重启sshd服务,此时通过22端口无法访问sftp服务。

代码语言:javascript
复制
vi /etc/ssh/sshd_config

按“i”进入编辑模式,在“Subsystem”命令前加“#”,使本行变为注释。

代码语言:javascript
复制
# Subsystem sftp /usr/libexec/openssh/sftp-server

重启sshd服务。

代码语言:javascript
复制
systemctl restart sshd.service

查看sshd服务状态。

代码语言:javascript
复制
systemctl status sshd.service

显示如下信息示例。

代码语言:javascript
复制
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-08-24 10:35:23 CST; 18min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 91176 (sshd)
CGroup: /system.slice/sshd.service
└─91176 /usr/sbin/sshd -D

Aug 24 10:35:23 dggbenv01220 systemd[1]: Starting OpenSSH server daemon...
Aug 24 10:35:23 dggbenv01220 sshd[91176]: Server listening on 0.0.0.0 port 22.
Aug 24 10:35:23 dggbenv01220 sshd[91176]: Server listening on :: port 22.
Aug 24 10:35:23 dggbenv01220 systemd[1]: Started OpenSSH server daemon.

修改配置sftpd服务

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

vim /etc/systemd/system/sftpd.service

按“i”进入编辑模式,修改以下内容:

代码语言:javascript
复制
Description=sftpd server daemon
Type=notify
EnvironmentFile=/etc/sysconfig/sftp
ExecStart=/usr/sbin/sftpd -f /etc/ssh/sftpd_config

编辑完成后按“Esc”退出编辑模式,输入“:wq!”保存并退出。

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

vim /etc/ssh/sftpd_config

按“i”进入编辑模式,找到第17行,将“Port 22”改为“Port 10022”。

  1. 找到第38行,将“#Perm itRootLogin yes”改为“PermitRootLogin no”。
  2. 找到第116行,将“#PidFile /var/run/sshd.pid”改为“PidFile /var/run/sftpd.pid”。
  3. 找到第132行,在“Subsystem sftp /usr/libexec/openssh/sftp-server”前加“#”使本行变为注释。另起一行添加“Subsystem sftp internal-sftp”。

  • 10022”表示端口号,可以是任意数值。
  • “#”表示该行的注释,去掉“#”就是取消该行的注释,并设置参数,将“yes”改成“no”,目的是禁止root用户登录。

删除/var/run/目录下的sftpd.pid文件内容。

代码语言:javascript
复制
rm -rf /var/run/sftpd.pid

启动sftpd服务。

代码语言:javascript
复制
systemctl daemon-reload
systemctl start sftpd

至此,sftpd服务已经配置完成并启动。

通过命令查看其状态信息。

代码语言:javascript
复制
systemctl status sftpd
代码语言:javascript
复制
● sftpd.service - OpenSSH server daemon
   Loaded: loaded (/etc/systemd/system/sftpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2021-08-24 16:27:55 CST; 2s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 111851 (sftpd)
   CGroup: /system.slice/sftpd.service
           └─111851 /usr/sbin/sftpd -f /etc/ssh/sftpd_config
 
Aug 24 16:27:55 dggbenv01220 systemd[1]: Starting OpenSSH server daemon...
Aug 24 16:27:55 dggbenv01220 sftpd[111851]: Server listening on 0.0.0.0 port 10022.
Aug 24 16:27:55 dggbenv01220 sftpd[111851]: Server listening on :: port 10022.
Aug 24 16:27:55 dggbenv01220 systemd[1]: Started OpenSSH server daemon.
  1. 可以看到sftpd服务已经在10022端口上启动监听服务。
  2. 用FileZilla客户端进行验证。

验证操作

使用sftp协议访问22端口

错误: FATAL ERROR: Received unexpected end-of-file from SFTP server

错误: 无法连接到服务器

使用root帐号通过sftp协议访问10022端口

错误: 认证失败。

错误: 严重错误: 无法连接到服务器

使用普通帐号通过sftp协议访问10022端口

可以连接成功,并上传下载文件。

二、CRC-8原理 模2除法   模2除法与算术除法类似,但每一位除的结果不影响其它位,即不向上一位借位,所以实际上就是异或。在循环冗余校验码(CRC)的计算中有应用到模2除法。

原文链接:https://support.huawei.com/enterprise/zh/doc/EDOC1100197618?section=j01y

本文由 小马哥 创作,采用 知识共享署名4.0 国际许可协议进行许可 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现原理
  • 操作步骤
    • 创建两个deamon
      • 创建两个service
        • 其他需要分离的文件
          • 修改配置sftpd服务
          • 验证操作
            • 使用sftp协议访问22端口
              • 使用root帐号通过sftp协议访问10022端口
                • 使用普通帐号通过sftp协议访问10022端口
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档