前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sftp与ssh端口分离_设置服务器端口监听

sftp与ssh端口分离_设置服务器端口监听

作者头像
全栈程序员站长
发布2022-10-05 09:58:42
4.7K0
发布2022-10-05 09:58:42
举报

大家好,又见面了,我是你们的朋友全栈君。

sftp,是ssh的功能之一,也就是说是使用SSH协议来传输文件的。 OS系统内开启ssh服务和sftp服务都是通过/usr/sbin/sshd这个后台程序监听22端口,而sftp服务作为一个子服务,是通过/etc/ssh/sshd_config配置文件中的Subsystem实现的,如果没有配置Subsystem参数,则系统是不能进行sftp访问的。 具体操作(本验证在Red Hat Linux7.9上进行): 一、复制SSH相关文件,作为sftp的配置文件 1、拷贝/usr/lib/systemd/system/目录下的sshd.service文件,放到/etc/systemd/system/目录下,命名为sftpd.service

代码语言:javascript
复制
cp /usr/lib/systemd/system/sshd.service  /etc/systemd/system/sftpd.service

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

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

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

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

4、对service和rcsftpd进行软连接

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

5、对sshd和sftpd进行软连接

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

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

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

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

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

二、修改复制好的配置文件 1、修改/etc/systemd/system/目录下sftpd.service文件

代码语言:javascript
复制
vi /etc/systemd/system/sftpd.service
在这里插入图片描述
在这里插入图片描述

修改图中圈红部分:

代码语言:javascript
复制
[Unit]
Description=sftpd server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sftp
ExecStart=/usr/sbin/sftpd -f /etc/ssh/sftpd_config
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

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

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

执行 :set number 将行号显示出来后,具体修改如下:

①找到第17行,将 #Port 22 改成 Port 2222

②找到第38行,将 #PermitRootLogin yes 改成 PermitRootLogin no 也就是取消该行的注释,并将yes改成no,这行参数的目的是拒绝root用户登录

③找到116行,将 #PidFile /var/run/sshd.pid 改成 PidFile /var/run/sftpd.pid 也就是取消该行的注释,并将sshd.pid改成sftpd.pid

④找到第132行,将 Subsystem sftp /usr/libexec/openssh/sftp-server 注释 #Subsystem sftp /usr/libexec/openssh/sftp-server,并添以下5行:

代码语言:javascript
复制
Subsystem sftp internal-sftp      # 指定使用sftp服务使用系统自带的internal-sftp
Match User sftpuser               # 匹配sftp组的用户,若要匹配多个组,可用逗号分开
X11Forwarding no                  # 禁止用户使用端口转发
AllowTcpForwarding no             # 禁止用户使用端口转发
ForceCommand internal-sftp        # 只能用于sftp登录

3、清空/var/run/目录下的sftpd.pid文件内容

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

4、添加sftp的专用账户

代码语言:javascript
复制
useradd  sftpuser
passwd  sftpuser
usermod  -s  /bin/false sftpuser

5、禁用selinux

代码语言:javascript
复制
setenforce 0
sed -i "s/^SELINUX\=enforcing/SELINUX\=disabled/g" /etc/selinux/config

6、重启sftpd服务

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

7、检查是否添加sftpd服务开机自启动

代码语言:javascript
复制
systemctl enable sftpd

三、验证问题解决 验证的时候,发现 sftp root@10.127.1.111 sftp sftpuser@10.127.1.111 也就是默认的22端口依然能够成功连接,解决方法是: 将/etc/ssh/sshd_config文件中的第132行 Subsystem sftp /usr/libexec/openssh/sftp-server 注释掉 #Subsystem sftp /usr/libexec/openssh/sftp-server 然后重启sshd服务

代码语言:javascript
复制
systemctl restart sshd

这样就只有 sftp -P 2222 sftpuser@10.127.1.111 能够连接成功。 原因:sftp服务是通过/etc/ssh/sshd_config配置文件中的Subsystem实现的,注释掉Subsystem参数配置,OS系统就不会通过默认的sftp形式进行访问了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档