在 RHEL/CentOS 系列服务器运维中,时间同步、安全远程登录、自动化计划任务是三大基础核心能力,直接决定服务器日志准确性、远程管理安全性与运维自动化效率。本文基于 RHEL9 官方规范,详细拆解 Chronyd 时间服务器OpenSSH 安全配置at 一次性任务 + crontab 周期性任务 的原理、配置与实战操作,新手也能直接照搬使用。


一、Chronyd 时间服务器(RHEL8+ 默认 NTP 实现)

1.1 为什么需要精准时间同步?

Linux 系统中,日志时间戳、数据库事务、集群通信、证书校验都依赖统一精准的系统时间。时间偏差会导致:

  • 日志错乱,无法排查问题
  • 集群节点通信失败
  • 证书认证异常
  • 备份 / 计划任务执行时间错误

从 RHEL8 开始,系统默认用 Chronyd 替代传统 ntpd 作为 NTP 协议实现,适配虚拟机、间歇性网络、温度波动等复杂场景,同步精度更高(局域网可达微秒级)。

1.2 Chronyd 核心组件

Chronyd 包含两个核心工具:

  • chronyd:后台守护进程,负责时间同步、提供 NTP 服务
  • chronyc:命令行工具,监控 chronyd 状态、临时修改配置(重启失效)

1.3 Chronyd 安装与服务管理

RHEL9 默认已安装 Chronyd,若未安装可手动部署:

# 安装 chrony
dnf install chrony -y

# 查看服务状态
systemctl status chronyd

# 开机自启 + 启动服务
systemctl enable --now chronyd

# 重启服务(配置修改后执行)
systemctl restart chronyd

1.4 chronyc 核心监控命令

(1)查看系统时间同步状态

chronyc tracking

关键字段:

  • Reference ID:当前同步的上级 NTP 服务器
  • System time:系统时间与 NTP 时间的偏差
  • Leap status:跳秒状态(Normal 为正常)

(2)查看 NTP 时间源

# 基础查看
chronyc sources
# 详细查看(带字段解释)
chronyc sources -v

字段标识:

  • ^*:当前最优时间源
  • ^-:未选中的备用源

(3)查看时间源统计信息

chronyc sourcestats -v

1.5 Chronyd 服务端 + 客户端配置

(1)服务端配置(为内网客户端提供时间同步)

编辑配置文件 /etc/chrony.conf

# 允许内网网段客户端同步时间(根据实际网段修改)
allow 192.168.0.0/16
# 开启日志记录
log measurements statistics tracking

重启服务 + 放行防火墙:

systemctl restart chronyd
# 测试环境可临时关闭防火墙
systemctl stop firewalld

(2)客户端配置(同步内网 Chronyd 服务端)

编辑配置文件 /etc/chrony.conf,注释默认公网 NTP 池,指向内网服务端:

# 注释默认公网源
# pool 2.rhel.pool.ntp.org iburst
# 指向内网 Chronyd 服务端
server 192.168.115.128 iburst

重启服务后,用 chronyc sources 验证同步状态。


二、OpenSSH 服务器(安全远程登录核心)

2.1 SSH 与 OpenSSH 基础

SSH(Secure Shell)是加密远程登录协议,替代明文传输的 Telnet/FTP,RHEL9 默认使用 OpenSSH 实现,仅支持更安全的 SSH2 协议。

核心组件:

  • sshd:SSH 服务端守护进程
  • ssh:SSH 客户端工具
  • scp/sftp:安全文件传输
  • ssh-keygen:密钥生成工具
  • ssh-copy-id:公钥分发工具

2.2 SSH 完整工作流程

  1. 版本协商:客户端与服务端确认使用 SSH2 协议
  2. 算法协商:协商加密、MAC、压缩算法
  3. 密钥交换:通过 DH 算法生成会话密钥,所有后续通信加密
  4. 身份认证:密码认证 / 密钥认证
  5. 会话交互:加密执行命令、传输文件

2.3 OpenSSH 服务管理

# 安装服务端(默认已装)
dnf install openssh-server -y

# 启动/开机自启
systemctl enable --now sshd

# 查看状态
systemctl status sshd

SSH 默认监听 22 端口,配置文件路径:/etc/ssh/sshd_config

2.4 SSH 核心配置(/etc/ssh/sshd_config)

# 监听端口(默认22,建议修改为非默认端口提升安全)
Port 22
# 监听所有网卡
ListenAddress 0.0.0.0
# 主机密钥文件
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
# 登录宽限时间(2分钟无操作断开)
LoginGraceTime 2m
# 最大认证尝试次数
MaxAuthTries 6
# 是否允许root远程登录(生产环境建议no)
PermitRootLogin prohibit-password
# 开启密码认证(密钥认证后可关闭)
PasswordAuthentication yes
# 允许登录用户白名单
AllowUsers redhat admin
# 关闭DNS反解(加速连接)
UseDNS no

修改配置后必须重启服务:systemctl restart sshd

2.5 密钥认证配置(免密登录,推荐)

(1)Linux → Linux 免密登录

# 1. 客户端生成密钥对(一路回车)
ssh-keygen

# 2. 公钥分发到服务端
ssh-copy-id root@192.168.115.128

# 3. 免密登录测试
ssh root@192.168.115.128

(2)Windows → Linux 免密登录

  1. Xshell 生成 RSA/Ed25519 密钥对
  2. 导出公钥,通过 rz 命令上传到 Linux
  3. 将公钥写入 ~/.ssh/authorized_keys
cat id_rsa_2048.pub >> ~/.ssh/authorized_keys
  1. Xshell 选择「Public Key」认证,直接登录

2.6 SSH 生产环境安全加固

  1. 禁用密码认证(仅允许密钥登录)

PasswordAuthentication no
systemctl restart sshd
  1. 修改默认 22 端口

Port 2222
# 配置SELinux放行新端口
semanage port -a -t ssh_port_t -p tcp 2222
# 防火墙放行
firewall-cmd --permanent --add-port=2222/tcp && firewall-cmd --reload
systemctl restart sshd
  1. 禁止 root 远程登录

PermitRootLogin no
  1. 设置登录用户白名单

AllowUsers redhat@192.168.1.0/24

2.7 Windows 原生 OpenSSH 使用

Windows 10/11 自带 OpenSSH,可直接用 PowerShell 操作:

# 安装 OpenSSH 服务端
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# 启动 sshd 服务
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

# 生成密钥对
ssh-keygen -t ed25519


三、Linux 计划任务(一次性 at + 周期性 crontab)

Linux 计划任务分为两类:

  • at 任务:一次性延迟执行,适合临时任务
  • crontab 任务:周期性重复执行,适合日常自动化运维

3.1 一次性任务:at 命令

(1)at 服务管理

# 安装 at(默认已装)
dnf install at -y

# 启动并开机自启
systemctl enable --now atd

# 查看服务状态
systemctl status atd

(2)at 任务创建

语法:at 时间规格,输入命令后按 Ctrl+D 提交

# 3分钟后执行
at now +3 minutes
at> wall "3分钟后提醒"
at> <EOT>  # Ctrl+D 提交

# 下午5点执行
at 17:00
at> echo "test" >> /tmp/test.txt

# 明天下午茶时间(16:00)
at teatime tomorrow

(3)at 任务管理

# 查看待执行任务
atq
# 查看任务详情
at -c 任务编号
# 删除任务
atrm 任务编号

(4)at 用户权限

  • /etc/at.allow:白名单(仅列表内用户可使用)
  • /etc/at.deny:黑名单(列表内用户禁止使用)
  • 两个文件都不存在:仅 root 可使用

3.2 周期性任务:crontab

(1)crond 服务管理

# crontab 由 cronie 包提供,默认已装
systemctl enable --now crond
systemctl status crond

(2)用户级 crontab 命令

# 编辑当前用户任务(默认vim编辑器)
crontab -e
# 查看当前用户任务
crontab -l
# 删除当前用户所有任务
crontab -r
# root 管理其他用户任务
crontab -u redhat -e

(3)crontab 语法规则(5 个时间字段 + 命令)

分 时 日 月 周  命令
*  *  *  *  *  command

字段说明:

  • *:任意时间
  • */n:每隔 n 单位
  • x-y:范围
  • x,y:列表

示例:

# 周一到周五 8:00-21:00 每2分钟写入日期到文件
*/2 8-21 * * 1-5 date >> /home/redhat/my_cron.txt

(4)系统级 crontab 配置

系统任务不建议用 crontab -e,推荐在 /etc/cron.d/ 下创建文件,多一个「执行用户」字段

# 每天凌晨1点,root 用户执行备份
0 1 * * * root /opt/backup.sh

系统预设周期目录(直接放可执行脚本即可):

  • /etc/cron.hourly/:每小时执行
  • /etc/cron.daily/:每天执行
  • /etc/cron.weekly/:每周执行
  • /etc/cron.monthly/:每月执行

(5)anacron 补跑机制

服务器关机 / 休眠时,crontab 会错过任务,anacron 会在系统开机后自动补跑错过的周期任务,配置文件:/etc/anacrontab

3.3 计划任务日志查看

所有计划任务执行日志都在:

tail -f /var/log/cron


四、总结

  1. Chronyd:RHEL8+ 默认时间同步工具,配置简单、精度高,服务端 + 客户端模式适配内网环境
  2. OpenSSH:生产环境必须用密钥认证,关闭密码登录、修改默认端口、限制 root 登录,提升安全
  3. 计划任务:临时任务用 at,周期性运维用 crontab,系统任务优先放在 /etc/cron.d/ 目录

这三大服务是 Linux 运维的基础,掌握配置与安全加固,能大幅提升服务器稳定性与运维效率。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐