星哥笔记 - 报错
type: channel
link: https://www.cingetech.com/tag/报错/
items: CentOS 7 修改SSH端口后重启报错！

CentOS 7 修改SSH端口后重启报错！
type: item
date: 2022-03-14T22:12:00+08:00
description: 在安装官方版 CentOS7 情况下，如果更改默认的 22 远程端口，然后打算用 systemctl restart sshd 命令使端口更改生效时，将会得到一个错误提示：Job for sshd.service failed because the control process exited with error code. See “systemctl status sshd.service” and “journalctl -xe” for details.而且如果此时重启，甚至连 ssh 服务都无法正常运行。原因报错原因其实是 SELinux（Security-Enhanced Linux） 所致。 SELinux 中文名为安全增强型 Linux， 是 Linux 内核的一个安全模块，提供了访问控制安全策略机制，SELinux 默认情况下限制了 ssh 的监听端口。既然知道了原因，解决方法也简单： · 直接关闭 SELinux 功能；或者 · 添加一个新的 ssh 监听端口；解决关闭 SELinux在关闭 SELinux 前，可以用命令 getenforce 查看当前的状态，一般默认是 Enforcing，即强制模式（违法 SELinux 规则的行为将被组织并记录到日志中）。此外还有另一种状态 Permissive，即允许模式，在这个模式下违法策略的行为仅做记录。所以如果只做临时使用，可以简单的切换到 Permissive 模式：# 切换到 Permissive 允许模式，1 为强制模式； setenforce 0这个方法的优点在于无需重启便可生效，但缺点也同样明显，一旦重启即失效。所以如果想长期生效，需换一种操作，即直接关闭 SELinux 服务：# 打开文件 vi /etc/selinux/config # 找到这一行：SELINUX=enforcing，修改为 SELINUX=disabled修改完成后，保存重启即可。如果vi进入/etc/selinux/config编辑模式下显示文件只读属性的话，需要再执行lsattr /etc/selinux/config # 执行如上命令，如果显示以下文件属性参数的话 ----i--------e- /etc/selinux/config # 继续执行chattr改变文件锁定属性 chattr -i /etc/selinux/config # 好了，继续愉快的vi吧！添加新端口这个方法的优点在于可以保留 SELinux 功能的同时解决了端口报错的问题，略微不便的是该方法需要联网安装一个命令 semanage：# provides 参数可以查看 semanage 包含在哪个安装包中 yum provides semanage # 得到结果后，再使用 install 参数安装 yum install policycoreutils-python -ypolicycoreutils-python 安装成功后，便可以使用 semanage 命令来添加端口，不过首先查看一下默认绑定的端口：# 查看 ssh 绑定的端口 semanage port -l | grep ssh # 可以看到返回的是默认的 22 端口 ssh_port_t tcp 22然后可以着手添加新端口，这里以 22022 为例：# 添加 22022 端口，注意这里的名称是 ssh_port_t semanage port -a -t ssh_port_t -p tcp 22022 # 验证下是否添加成功 semanage port -l | grep ssh # 可以看到 22022 已在返回结果中 ssh_port_t tcp 22022, 22-l：查看记录-a：添加-m：修改-d：删除-t：添加类型-p：指定端口类型（tcp、udp）最后两个方法各有优劣，不过除非说有要求关闭 SELinux 服务，不然更推荐使用第二种方法。此外，虽然报错的问题解决了，但别忘了还需要在防火墙中放行新增的端口。