1.chrony 服务器
1.1 简介
1.1.1 重要性
准确的系统时间是运维环境的基础,主要场景:
- 日志、网络数据包需要标准时间戳,方便故障排查;
- 订单、交易等业务数据依赖统一时间;
- 时间不一致会导致 yum / 软件源校验失败、证书失效、集群节点异常等问题。
1.1.2 Linux 的两个时钟
-
硬件时钟 RTC(Real Time Clock):主板电池供电,保存在 BIOS。断电后时间不会丢失。
查看硬件时间
hwclock
硬件时间同步到系统时间
hwclock -s
-
系统时钟 System Clock:内核维护的软件时钟,存放在内存,断电丢失。
查看系统时间
date
1.1.3 NTP
NTP(Network Time Protocol)网络时间协议,基于 UDP 123 端口,用于分布式设备时钟同步。 局域网精度可达 0.1ms,互联网环境一般 1~50ms;一台 NTP 服务器既可以向上同步上层时间源,也可以作为时间服务器给内网设备提供时间。
1.1.4 chrony
chrony 是开源时间同步工具,RHEL9、OpenEuler 默认使用,替代传统 ntp 服务,chrony 和 ntp 不能同时开启,会造成时间冲突。 chrony 包含两个组件:
chronyd:后台守护进程,负责和上游 NTP 服务器同步、校准内核系统时钟;chronyc:交互式命令行客户端,查看同步状态、手动执行同步操作。
1.2 安装与配置
1.2.1 安装
RHEL9 默认自带 chrony,如缺失可安装:
yum install chrony -y
# 开机自启并立即启动
systemctl enable --now chronyd
1.2.2 chrony 配置文件
主配置文件:/etc/chrony.conf
# iburst:首次同步快速发包,快速完成时间校准
server ntp.aliyun.com iburst
# 记录时间补偿偏移文件,重启后用于时钟补偿
driftfile /var/lib/chrony/drift
# 前3次同步,如果时间偏差大于1s,直接步进修改时间
makestep 1.0 3
# 开启内核RTC硬件时钟同步
rtcsync
# 允许指定网段的客户端来本机同步时间(做内网时间服务器时打开)
#allow 192.168.48.0/24
# 即使没有上游时间源,本机也对外提供时间服务(层级10)
#local stratum 10
# 日志目录
logdir /var/log/chrony
1.2.3 实操:使用阿里时间源同步
# 手动修改错误时间,用于测试
date -s 2025-10-10
# 编辑chrony配置,替换为阿里NTP源
vim /etc/chrony.conf
server ntp.aliyun.com iburst
driftfile /var/lib/chrony/drift
rtcsync
makestep 10 3
bindcmdaddress 127.0.0.1
bindcmdaddress ::1
keyfile /etc/chrony.keys
commandkey 1
generatecommandkey
logchange 0.5
logdir /var/log/chrony
# 重启chronyd服务
systemctl restart chronyd
# 查看同步源,*代表当前正在使用的有效时间源
chronyc sources
# 查看系统时间同步状态
timedatectl
# System clock synchronized: yes 代表同步成功
1.3 chrony 常用命令
# 查看同步源详情
chronyc sources -v
# 查看时间源统计信息
chronyc sourcestats -v
# 查看在线时间源数量
chronyc activity -v
# 强制立即同步时间
chronyc -a makestep
chronyc sources 状态标识说明
| 标识 | 含义 |
|---|---|
* |
当前选中、正常同步的最优时间源 |
+ |
可用备选源,参与时钟计算 |
- |
算法排除,不参与计算 |
? |
连接失败,不可用 |
x |
虚假时钟源,时间异常 |
~ |
时间波动太大,不稳定 |
- Stratum:层级,1 层为基准时钟,数字越大,离基准时钟越远;
- Poll:轮询间隔,2 的次方,6=64 秒;
- Reach:可达性,377 代表连续 8 次都收到响应;
- Last sample:本地时钟和时间源的偏移。
2. 远程登录服务 SSH
2.1 简介
2.1.1 概念
远程登录可以在远端操作 Linux 主机,操作体验和本地终端一致。
2.1.2 分类
- 明文:Telnet、rsh(生产环境禁用)
- 加密文字接口:SSH(主流)
- 图形远程:VNC、XRDP、XDMCP
2.1.3 SSH 协议
SSH(Secure Shell Protocol)安全壳协议,加密传输; SSH 提供两大能力:
- 远程 shell 登录(替代 telnet)
- sftp,安全文件传输(替代 ftp)
2.2 加密基础:非对称密钥
- 公钥(public key):对外分发,用来加密数据;
- 私钥(private key):自己留存,用来解密公钥加密的数据。
2.3 SSH 工作流程
一共 5 个阶段:
- 版本号协商:明文传输版本,协商使用 SSH1/SSH2;
- 密钥与算法协商:协商加密、校验、压缩算法,通过 DH 算法生成会话密钥;
- 认证阶段:密码认证 / 密钥认证;
- 会话请求:认证通过后客户端发起会话;
- 交互会话:加密传输 shell 交互数据。
重点:后续所有业务数据,使用会话密钥对称加密,速度快。
两种认证方式
- 密码认证:用户名 + 密码加密传输,服务端校验;
- 密钥认证(免密) :客户端公钥提前放到服务端
~/.ssh/authorized_keys,不需要密码。
2.4 SSH 服务配置
2.4.1 安装
yum install openssh-server -y
systemctl enable --now sshd
主配置文件:/etc/ssh/sshd_config
# 加载子配置文件
Include /etc/ssh/sshd_config.d/*.conf
Port 22 # 监听端口,默认22
ListenAddress 0.0.0.0 # 监听IPv4所有地址
ListenAddress :: # 监听IPv6
# 主机密钥
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
LoginGraceTime 2m # 密码输入超时时间
PermitRootLogin yes # 是否允许root远程登录
MaxAuthTries 6 # 最大密码尝试次数
MaxSessions 10 # 最大并发会话
AuthorizedKeysFile .ssh/authorized_keys # 免密公钥存放位置
PasswordAuthentication yes # 是否开启密码登录
PermitEmptyPasswords no # 禁止空密码登录
UseDNS no # 关闭DNS反向解析,提升连接速度
Subsystem sftp /usr/libexec/openssh/sftp-server # 开启sftp
# 白名单:只允许指定用户登录(按需添加)
#AllowUsers test
#DenyUsers user1
修改 sshd 配置后必须重启
systemctl restart sshd
2.5 实操
2.5.1 修改 SSH 端口
vim /etc/ssh/sshd_config
Port 2222
systemctl restart sshd
# 客户端连接,-p 指定端口
ssh -p 2222 root@192.168.56.133
注意:防火墙放行新端口,否则无法连接。
2.5.2 禁止 root 远程登录
修改:PermitRootLogin no
vim /etc/ssh/sshd_config
PermitRootLogin no
systemctl restart sshd
root 无法远程登录,普通用户不受影响。
参数补充:
- yes:允许 root 登录
- no:禁止 root 登录
- prohibit-password:root 仅密钥登录,禁止密码登录
2.5.3 密钥免密登录
# 客户端生成rsa密钥对,一路回车
ssh-keygen -t rsa
# 将公钥推送至目标服务器
ssh-copy-id root@192.168.56.133
# 测试免密登录
ssh root@192.168.56.133
密钥文件说明:
id_rsa:私钥(保密,不能泄露)id_rsa.pub:公钥,分发到服务器 服务器存放路径:/root/.ssh/authorized_keys
2.5.4 登录白名单(只允许指定用户登录)
# 服务端添加用户test
useradd test
echo '123456' | passwd --stdin test &> /dev/null
vim /etc/ssh/sshd_config
AllowUsers test
systemctl restart sshd
配置后,只有 test 用户可以 ssh 登录,root 和其他用户直接拒绝。