背景

Oracle安装的系统默认使用public key的方式进行ssh登录验证,这种方式不可否认,很安全,但是在需要用到scp传输的时候,就显得不那么方便了。

因此,需要开启password认证,开启password认证之后,如果再使用默认的22端口,很容易遭受不断的扫描攻击;so,建议修改一个高范围端口号(如,12345)。

问题

在修改了默认端口号,从22修改到其它端口(如,12345)后,通过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.

通过systemctl status sshd查看如下结果:

sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since Tue 2020-08-18 01:41:10 GMT; 5s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
  Process: 24372 ExecStart=/usr/sbin/sshd -D $OPTIONS (code=exited, status=255)
 Main PID: 24372 (code=exited, status=255)

Aug 18 01:41:10 instance-20200815-0027-notfree systemd[1]: Failed to start OpenSSH server daemon.
Aug 18 01:41:10 instance-20200815-0027-notfree systemd[1]: Unit sshd.service entered failed state.
Aug 18 01:41:10 instance-20200815-0027-notfree systemd[1]: sshd.service failed.

这个时候一定要注意,不要重启,否则可能服务器就连接不上了。

原因

报错原因是 SELinux(Security-Enhanced Linux) 所致。 SELinux 中文名为安全增强型 Linux, 是 Linux 内核的一个安全模块,提供了访问控制安全策略机制,SELinux 默认情况下限制了 ssh 的监听端口。

解决方案有两种:

  • 关闭SELinux;
  • 在SELinux中添加新的ssh监听端口

解决方案

关闭SELinux

可以通过getenforce查看当前的状态,默认是Enforcing(强制模式,违反SELinux规则的行为会被记录到日志中)。另外还有一种Permissive(允许模式)。
如果只是临时使用,可以通过命令切换到允许模式:

# 切换到 Permissive 允许模式,1 为强制模式;
setenforce 0

但是这个操作,重启就会失效,另外一种永久生效的方法就是写入文件。

vi /etc/selinux/config
---
# 找到这一行:SELINUX=enforcing,修改为
SELINUX=disabled

保存即可。

通常,我们先通过命令切换,然后写入文件。这样就可以不用重启再生效。

SELinux中添加新的SSH端口

这种方法可以保留SELinux功能,同时解决修改ssh端口报错的问题。
使用命令semanage,如果命令不存在,则安装

yum install policycoreutils-python -y

查看ssh默认绑定端口

semanage port -l | grep ssh
----
ssh_port_t                     tcp      22

添加新端口(以,12345为例)

# 注意名称是 ssh_port_t
semanage port -a -t ssh_port_t -p tcp 12345

验证下是否添加成功

semanage port -l | grep ssh
---
ssh_port_t                     tcp   12345, 22
  • -l:查看记录
  • -a:添加
  • -m:修改
  • -d:删除
  • -t:添加类型
  • -p:指定端口类型(tcp、udp

如果需要的安全性不是特别高,个人推荐第一种方案。

最后修改:2020 年 08 月 18 日 10 : 10 AM