在 CentOS 7 中修改 sshd 的端口

本文详细介绍了如何在Linux系统中更改SSH服务的默认端口,包括编辑sshd_config文件、配置防火墙规则、调整SELinux策略等步骤。适用于希望提高SSH服务安全性或进行故障排查的用户。

转自

  1. 编辑 /etc/ssh/sshd_config

添加/修改 Port XX 行(把 XX 改成需要设定的端口)

  1. 查看防火墙是否开启

     systemctl status firewalld.service
    

如果开启,需要在防火墙上开放上面的端口:

    # 先查看是否已经添加了
    firewall-cmd --zone=public --list-port

    # 如果添加了该端口,可忽略这条命令。把 XX 改成实际需要修改的端口
    firewall-cmd --zone=public --add-port=XX/tcp --permanent

    # 重新加载
    firewall-cmd --reload
  1. 查看 SELinux 是否开启

     sestatus -v
    

如果显示 disabled 则表示 SELinux 已经关闭,可略过本步骤。

如果需要关闭 SELinux,可以编辑 /etc/selinux/config

SELINUX=enforcing 这一行改成:

    SELINUX=disabled

然后重启,可再次输入 sestatus -v 来查看是否已经关闭了。

如果不想关闭 SELinux,可以在 SELinux 中允许上面设定的 sshd 端口:

要修改 SELinux 的设置,需要使用 semanage 命令,而系统本身默认没有安装,可以通过 yum provides semanage 来查看哪个包提供该命令。从该命令可知是由 policycoreutils-python 这个包来提供,然后安装该包:

    yum install policycoreutils-python

安装好该包后,可以通过下面的命令查看目前 sshd 在 SELinux 中的端口:

    semanage port -l | grep ssh

一般会显示:

    ssh_port_t tcp 22

这时,我们可以把 port 添加到 SELinux 的 ssh_port_t 中:

    semanage port -a -t ssh_port_t -p tcp XX

之后再次运行 semange port -l | grep ssh 就可以看到刚才添加的 port 了。

  1. 现在我们重启 sshd 就可以看到新的 port 生效了。

     systemctl restart sshd.service
     systemctl status sshd.service
    

PS: 如果 SELinux 是开启状态,并且未把端口添加到 SELinux 中就重启 sshd,则在 systemctl status sshd.service 中显示启动 sshd 失败,提示 (code=exited, status=255)。在 journalctl -u sshd.service 中显示 error: Bind to port xxxx on 0.0.0.0 failed: Permission denied.


### 排查和解决 CentOS 7修改 SSH 端口后无法重启 `sshd` 服务的问题 在 CentOS 7修改 SSH 端口后,如果无法重启 `sshd` 服务,通常涉及以下几个关键原因,需要逐一排查: #### 1. 配置文件语法错误 修改 `/etc/ssh/sshd_config` 文件时,如果新增或修改 `Port` 指令时存在拼写错误或格式问题,可能导致配置文件无法被正确解析。可以通过以下命令检查配置文件语法: ```bash sshd -t ``` 如果命令无输出,表示配置文件正确;如果有错误提示,需根据提示修复配置文件。 #### 2. SELinux 或防火墙限制 SELinux 可能限制了非标准端口的使用。如果新端口未在 SELinux 策略中注册,需要添加端口到 `ssh_port_t` 类型中。例如,假设新端口为 `10008`: ```bash semanage port -a -t ssh_port_t -p tcp 10008 ``` 此外,防火墙(如 `firewalld`)也需要开放新端口: ```bash firewall-cmd --permanent --add-port=10008/tcp firewall-cmd --reload ``` #### 3. 服务未能正确重启 如果 `systemctl restart sshd` 命令执行失败,可以查看服务状态以获取更多信息: ```bash systemctl status sshd journalctl -u sshd ``` 日志中可能会显示具体的错误原因,例如端口冲突、权限问题等。 #### 4. SSH 服务未启用或配置未生效 确保 `sshd` 服务已启用并设置为开机启动: ```bash systemctl enable sshd ``` 此外,修改配置文件后需重启服务以使更改生效: ```bash systemctl restart sshd ``` #### 5. 端口冲突 新设置的端口可能已被其他服务占用。可以通过以下命令检查端口占用情况: ```bash netstat -tuln | grep 10008 ``` 如果发现端口被占用,需停止占用端口的服务或更改 SSH 端口。 #### 6. 配置文件中 `Port` 指令格式问题 确保在 `/etc/ssh/sshd_config` 文件中正确设置了 `Port` 指令。例如,将端口设置为 `10008`: ```bash Port 10008 ``` 注意不要遗漏 `Port` 关键字,也不要在同一行添加注释。 ### 示例修复步骤 1. **编辑 SSH 配置文件**,确保 `Port` 设置正确: ```bash vim /etc/ssh/sshd_config ``` 添加或修改以下行: ```bash Port 10008 ``` 2. **检查配置文件语法**: ```bash sshd -t ``` 3. **向 SELinux 添加新端口**(如果使用 SELinux): ```bash semanage port -a -t ssh_port_t -p tcp 10008 ``` 4. **配置防火墙**,开放新端口: ```bash firewall-cmd --permanent --add-port=10008/tcp firewall-cmd --reload ``` 5. **重启 SSH 服务**: ```bash systemctl restart sshd ``` 6. **检查服务状态**,确保服务正常运行: ```bash systemctl status sshd ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值