我要提问
ARTICLE DETAIL

资讯详情

前沿编程新知与开发实战干货的深度解读。

CentOS 7.6 SSH密钥登录与TCP Wrappers安全加固实战

CentOS 7.6 SSH密钥登录与TCP Wrappers安全加固实战 1. 项目概述为什么在CentOS 7.6时代还得死磕SSH密钥登录与TCP Wrappers你可能已经习惯了用密码点几下就登进服务器但真正在生产环境摸爬滚打过的人都清楚CentOS 7.6不是“老古董”而是大量政企、金融、教育类内网系统至今仍在稳定运行的“压舱石”。它不支持systemd-networkd不默认启用SELinux策略白名单内核版本锁定在3.10.0-957系列——这些不是缺陷而是可控性、可审计性与合规基线的体现。而在这个生态里“远程访问及控制”从来不是一句轻飘飘的功能描述它直接对应着三道生死线身份可信度、通道加密强度、访问边界粒度。我接手过某高校实验室的旧集群维护23台CentOS 7.6物理节点全部暴露在校园网二层广播域中。最初用root弱密码默认22端口三个月内被扫描爆破日志塞满/var/log/secure单日最高达17万次失败尝试。后来我们彻底重构远程访问体系禁用密码登录、强制密钥认证、绑定SSH客户端指纹、用TCP Wrappers做IP服务双维度拦截。改造后SSH相关告警归零运维响应时间从平均47分钟压缩到8分钟以内——这不是玄学优化是把三个被很多人当成“可选配置”的模块真正拧成了一条防御铁链。这里说的“SSH密钥登录”不是简单执行ssh-keygen -t rsa就完事“SSH客户端”也不只是指OpenSSH自带的ssh命令而是涵盖连接复用、跳转代理、会话审计等一整套终端交互范式至于“TCP Wrappers”更不是/etc/hosts.allow里随便写两行IP就叫用了——它的规则优先级、通配符陷阱、与iptables的协同逻辑稍有不慎就会让整个访问控制形同虚设。这篇内容就是带你在CentOS 7.6这个特定土壤上把这三块砖严丝合缝地砌成一堵墙。适合所有还在维护RHEL系7.x系统的运维、安全工程师、高校IT管理员以及准备考RHCE但卡在“安全加固”模块的考生——因为考试题库里的“配置TCP Wrappers拒绝192.168.100.0/24访问sshd”这种题背后全是真实战场经验。2. 整体设计思路为什么必须三者联动单点加固为何注定失效2.1 密钥登录不是“替代密码”而是重建信任锚点很多人以为“ssh-keygen生成密钥对→复制公钥到authorized_keys→禁用PasswordAuthentication”就完成了密钥登录。错。这仅完成了通道建立环节。真正的密钥登录加固必须覆盖全生命周期密钥生成阶段RSA 2048已不够看NIST早在2015年就建议停用ECDSA比RSA快3倍但兼容性差Ed25519是当前最优解——它基于椭圆曲线私钥仅32字节抗量子计算能力更强且OpenSSH 6.5原生支持CentOS 7.6默认OpenSSH 7.4p1完全满足。密钥存储阶段私钥绝不能裸放~/.ssh/id_ed25519必须用passphrase加密且passphrase长度≥12位、含大小写字母数字符号。我见过太多人图省事设成“123456”结果U盘丢失等于服务器沦陷。密钥分发阶段公钥不能靠scp手动推送必须用ssh-copy-id -i ~/.ssh/id_ed25519.pub userhost它会自动处理权限.ssh目录700、authorized_keys 600、追加而非覆盖、检测shell类型。手动操作漏掉chmod会导致“Permission denied (publickey)”。提示CentOS 7.6的sshd_config中PubkeyAuthentication yes是默认开启的但关键在StrictModes yes默认开启——它强制校验.ssh目录和文件权限任何宽松权限都会导致密钥认证静默失败。这是新手踩坑率最高的点没有之一。2.2 SSH客户端不是“发起连接的工具”而是会话策略执行器把ssh命令当成“连上去就行”的玩具是运维事故的温床。在CentOS 7.6环境下一个合格的SSH客户端配置必须解决三个问题连接稳定性内网延迟抖动、防火墙超时、中间设备NAT老化都会导致SSH会话无故断开。单纯靠客户端重连无法解决必须由服务端主动保活。跳转安全性当目标服务器不在直连网段如DMZ区→内网区需通过跳板机中转。传统ssh userjump; ssh usertarget方式凭证在跳板机内存明文存在且无法审计具体操作。会话可追溯性谁、什么时间、从哪台机器、执行了什么命令必须有完整记录。Linux自带的last、lastlog只能查登录无法捕获sudo命令或交互式操作。解决方案不是堆砌工具而是用OpenSSH原生能力构建管道服务端配置ClientAliveInterval 60每60秒发心跳包 ClientAliveCountMax 3连续3次无响应则断开配合客户端ServerAliveInterval 30形成双向保活用ProxyJump指令替代手工跳转ssh -o ProxyJumpuserjump-host target-host密钥认证全程不落地跳板机只做TCP转发结合auditd与sshd的ForceCommand机制将用户shell强制重定向到自定义审计脚本记录所有输入输出。2.3 TCP Wrappers不是“防火墙补充”而是服务级访问控制器这是最常被误解的模块。很多人觉得“iptables能封IPTCP Wrappers何必多此一举”——因为iptables工作在网络层L3它看到的是IP端口而TCP Wrappers工作在应用层L7它看到的是服务名客户端主机名请求进程。举个真实案例某单位要求“仅允许财务部IP访问数据库服务”但数据库监听在3306端口而同一台服务器还跑着Web服务80端口。若只用iptables封3306端口财务部同事访问Web也会被误杀而TCP Wrappers可精确到mysqld服务对httpd完全无感。更关键的是TCP Wrappers的规则解析顺序是硬编码的先查/etc/hosts.allow匹配即放行未匹配则查/etc/hosts.deny匹配即拒绝都未匹配则默认放行。这个“allow优先”原则与iptables的“deny all then allow specific”思维截然相反。很多管理员按iptables习惯写hosts.deny “ALL: ALL”却忘了hosts.allow里没写任何规则结果所有服务瞬间瘫痪——这就是没吃透设计哲学的代价。三者联动的价值在于构建纵深防御密钥登录解决“你是谁”身份强认证→SSH客户端策略解决“你怎么连”连接过程受控→TCP Wrappers解决“你能连什么”服务级访问授权缺一不可。就像给保险柜装三把锁指纹锁密钥、时间锁客户端保活、地域锁TCP Wrappers少一把防盗等级就断崖式下降。3. 核心细节解析密钥生成、客户端配置、TCP Wrappers规则的实操要点3.1 Ed25519密钥生成与部署的7个致命细节在CentOS 7.6上生成Ed25519密钥看似一行命令实则暗藏7处必须人工干预的细节确认OpenSSH版本ssh -V输出应为 OpenSSH_7.4p1, OpenSSL 1.0.2k-fips。若低于此版本如某些精简版镜像需先升级yum update openssh* -y。注意升级openssh-server会重启sshd务必提前配置好密钥登录否则可能被锁门外。生成密钥时指定commentssh-keygen -t ed25519 -C adminlab-2024 -f ~/.ssh/id_ed25519。comment字段会写入公钥末尾用于标识密钥用途。当authorized_keys里有几十个密钥时靠comment快速定位比翻日期靠谱得多。私钥权限必须600且属主为当前用户chmod 600 ~/.ssh/id_ed25519 chown $USER:$USER ~/.ssh/id_ed25519。CentOS 7.6的sshd严格校验哪怕属组是wheel也会拒绝加载。公钥追加必须用ssh-copy-id禁用手动echossh-copy-id -i ~/.ssh/id_ed25519.pub user192.168.1.100。它会自动执行检测远程.ssh目录是否存在不存在则创建并设700权限将公钥追加到authorized_keys末尾非覆盖设置authorized_keys权限为600手动echo 会因权限错误导致认证失败且无法回滚。服务端authorized_keys权限检查登录目标服务器执行ls -l ~/.ssh/authorized_keys。若显示-rw-r--r--644必须立刻chmod 600 ~/.ssh/authorized_keys。sshd在StrictModes开启时会拒绝读取权限大于600的文件。禁用密码登录前必须验证密钥登录成功两次第一次用新密钥登录第二次用ssh -o PubkeyAuthenticationyes -o PasswordAuthenticationno userhost显式关闭密码双重确认。我曾因网络抖动导致第一次登录实际走的是密码误判密钥生效随后禁用密码就再也登不进去了。备份私钥到离线介质将id_ed25519用gpg加密后存U盘gpg -c id_ed25519密码用密码管理器保存。Ed25519私钥无法导出为PEM格式一旦丢失唯一办法是重置所有服务器authorized_keys——这对23台节点的集群意味着至少4小时停机。注意不要在/root/.ssh/下生成密钥CentOS 7.6的sshd默认以root身份启动但普通用户登录时sshd会切换到对应用户UID再读取其家目录下的authorized_keys。root用户的密钥只对root登录有效普通用户仍需各自配置。3.2 SSH客户端配置文件的实战参数详解CentOS 7.6的SSH客户端配置位于/etc/ssh/ssh_config全局和~/.ssh/config用户级。后者优先级更高且支持Host别名是日常运维的主力配置。以下是我在线上环境验证有效的最小化安全配置# ~/.ssh/config Host lab-* User admin IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes ServerAliveInterval 30 ServerAliveCountMax 3 StrictHostKeyChecking ask UserKnownHostsFile ~/.ssh/known_hosts_lab Host jump HostName 192.168.1.10 User jumpadmin IdentityFile ~/.ssh/id_ed25519_jump Host db-prod HostName 10.0.2.5 User dba ProxyJump jump IdentityFile ~/.ssh/id_ed25519_db逐项解释其不可替代性IdentitiesOnly yes强制只使用IdentityFile指定的密钥忽略ssh-agent中其他密钥。避免因agent中混入测试密钥导致登录失败。ServerAliveInterval 30客户端每30秒向服务端发送空包防止中间防火墙因超时切断连接。值设为30而非60是因为CentOS 7.6默认ClientAliveInterval60客户端保活频率需高于服务端才能确保不被踢出。StrictHostKeyChecking ask首次连接时提示确认主机指纹后续自动匹配。设为yes会拒绝任何新主机设为no则完全不校验ask是安全与便利的平衡点。UserKnownHostsFile为不同环境lab/test/prod指定独立known_hosts文件避免测试环境主机密钥污染生产环境记录导致“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED”误报。ProxyJump jump比ProxyCommand更简洁。它自动建立跳转隧道且密钥认证在本地完成跳板机无需存储任何私钥。实测对比未配置ServerAliveInterval时内网SSH会话平均存活112秒配置后提升至7小时以上直到用户主动退出。这不是玄学是TCP Keepalive机制在应用层的精准实现。3.3 TCP Wrappers规则编写的5条军规与3个反模式TCP Wrappers的配置文件是/etc/hosts.allow和/etc/hosts.deny但规则编写远非“写IP地址”那么简单。以下是经过23台节点压测验证的5条军规军规1永远先写hosts.allow再写hosts.deny规则引擎按顺序扫描先匹配allow即放行不再看deny。若先写deny “sshd: ALL”再写allow “sshd: 192.168.1.0/24”后者永远不会生效。军规2服务名必须与ps aux输出的进程名一致ps aux | grep sshd显示进程为/usr/sbin/sshd -D则服务名是sshd不是ssh或sshd.service。写错则规则完全无效。军规3IP段必须用CIDR禁用netmask正确sshd: 192.168.1.0/24错误sshd: 192.168.1.0:255.255.255.0TCP Wrappers不识别netmask格式军规4域名解析必须可逆若写sshd: admin.lab.local则目标IP必须能通过nslookup 192.168.1.100反向解析出admin.lab.local否则匹配失败。生产环境强烈建议用IP段避免DNS单点故障。军规5日志必须启用且定向到独立文件在/etc/hosts.allow中添加sshd: ALL: spawn /bin/echodatefrom %a to %h /var/log/tcpwrap.log 21。否则所有拒绝事件只记在messages里与kernel日志混杂难以审计。三个必须规避的反模式反模式1在hosts.deny写“ALL: ALL”作为兜底这会拒绝所有服务包括crond、rsyslog导致系统崩溃。正确做法是明确拒绝高危服务sshd: ALL EXCEPT 192.168.1.0/24。反模式2用通配符“*”代替具体服务ALL: 192.168.1.100会同时放行sshd、httpd、mysqld违背最小权限原则。必须精确到sshd: 192.168.1.100。反模式3修改后不测试就重启sshdTCP Wrappers规则在sshd进程启动时加载修改后无需重启sshd但必须用tcpdmatch sshd 192.168.1.100命令实时验证。该命令模拟从192.168.1.100发起连接返回“yes”表示放行“no”表示拒绝。实操心得某次为阻断某IP段扫描我在hosts.deny写了sshd: 222.186.0.0/16结果发现该段包含某云厂商出口IP导致运维同事无法登录。紧急修复方案是在hosts.allow中优先写sshd: 222.186.100.50运维固定IP再写deny规则。这印证了“allow优先”原则的实战价值。4. 完整实操流程从零搭建CentOS 7.6安全远程访问体系4.1 环境初始化与风险预检15分钟在动手前必须完成三项预检否则后续步骤可能引发雪崩检查SELinux状态sestatus输出应为enabled且current mode: enforcing。若为permissive或disabled需执行setenforce 1并编辑/etc/selinux/config设SELINUXenforcing。CentOS 7.6的sshd与TCP Wrappers深度集成SELinux禁用会导致规则失效。确认sshd服务未被systemd屏蔽systemctl is-enabled sshd应返回enabled。若为disabled执行systemctl enable sshd。某些最小化安装镜像会默认disable sshd。备份原始配置cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date %Y%m%d) cp /etc/hosts.allow /etc/hosts.allow.bak.$(date %Y%m%d) cp /etc/hosts.deny /etc/hosts.deny.bak.$(date %Y%m%d)备份必须带时间戳且存放在/etc目录下非/home避免磁盘满时备份失败。风险提示所有配置修改必须在screen或tmux会话中进行执行screen -S ssh-secure创建会话防止网络中断导致配置半途而废。我曾因办公室断电未开screen直接改sshd_config结果sshd重启失败只能挂载光盘进救援模式修复——这种事故本可0成本避免。4.2 密钥登录全流程实施25分钟步骤1在客户端生成Ed25519密钥对# 生成密钥comment标注环境与日期 ssh-keygen -t ed25519 -C centos76-lab-20240520 -f ~/.ssh/id_ed25519_lab # 设置私钥权限关键 chmod 600 ~/.ssh/id_ed25519_lab步骤2将公钥部署到所有目标服务器# 对每台服务器执行用for循环批量处理 for ip in 192.168.1.101 192.168.1.102 192.168.1.103; do ssh-copy-id -i ~/.ssh/id_ed25519_lab.pub admin$ip done执行后每台服务器的/home/admin/.ssh/authorized_keys末尾会新增一行形如ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID... admincentos76-lab-20240520步骤3服务端sshd_config强化配置编辑/etc/ssh/sshd_config确保以下参数生效取消注释并修改值PubkeyAuthentication yes PermitRootLogin no # 禁用root直接登录 PasswordAuthentication no # 关键禁用密码登录 StrictModes yes # 强制权限校验 MaxAuthTries 3 # 密码尝试上限虽已禁用但防配置回滚 ClientAliveInterval 60 ClientAliveCountMax 3 UsePAM yes # 启用PAM为后续审计埋点步骤4重启sshd并验证# 语法检查必做 sshd -t # 若输出Syntax OK再重启 systemctl restart sshd # 新开终端验证密钥登录 ssh -i ~/.ssh/id_ed25519_lab admin192.168.1.101 # 成功后立即测试密码登录是否失效 ssh -o PubkeyAuthenticationno admin192.168.1.101 # 应返回Permission denied4.3 SSH客户端高级配置落地10分钟在客户端~/.ssh/config中写入以下内容根据实际环境替换IP和用户名# 全局基础配置 Host * ServerAliveInterval 30 ServerAliveCountMax 3 StrictHostKeyChecking ask UserKnownHostsFile ~/.ssh/known_hosts_secure # 实验室集群统一配置 Host lab-node-* User admin IdentityFile ~/.ssh/id_ed25519_lab IdentitiesOnly yes # 跳板机配置 Host jump-lab HostName 192.168.1.10 User jumpadmin IdentityFile ~/.ssh/id_ed25519_jump # 内网数据库节点经跳板机 Host db-lab HostName 10.0.2.5 User dba ProxyJump jump-lab IdentityFile ~/.ssh/id_ed25519_db验证配置有效性# 测试跳转是否通畅 ssh -v db-lab 21 | grep debug1: Connection established # 应看到连接建立成功的debug日志 # 测试保活效果 ssh lab-node-101 # 在会话中执行长耗时命令如 find / -name *.log | head -20观察是否断连4.4 TCP Wrappers策略部署与审计闭环20分钟步骤1编写hosts.allow规则# 编辑 /etc/hosts.allow echo sshd: 192.168.1.0/24 : allow /etc/hosts.allow echo sshd: 10.0.2.0/24 : allow /etc/hosts.allow echo sshd: 127.0.0.1 : allow /etc/hosts.allow # 添加日志记录 echo sshd: ALL : spawn /bin/echo date from %a to %h /var/log/tcpwrap.log 21 /etc/hosts.allow步骤2编写hosts.deny规则# 清空原有内容写入精准拒绝 /etc/hosts.deny echo sshd: ALL : deny /etc/hosts.deny步骤3创建日志目录并设置权限mkdir -p /var/log/tcpwrap touch /var/log/tcpwrap.log chown root:root /var/log/tcpwrap.log chmod 600 /var/log/tcpwrap.log # 配置logrotate防止日志撑爆磁盘 cat /etc/logrotate.d/tcpwrap EOF /var/log/tcpwrap.log { daily missingok rotate 30 compress delaycompress notifempty create 600 root root } EOF步骤4实时验证规则有效性# 模拟合法IP访问应返回yes tcpdmatch sshd 192.168.1.50 # 模拟非法IP访问应返回no tcpdmatch sshd 203.208.60.1 # 查看实时日志 tail -f /var/log/tcpwrap.log # 此时从另一台机器ssh连接应看到类似 # Tue May 20 14:22:33 CST 2024 from 192.168.1.50 to lab-node-101步骤5审计闭环——将TCP Wrappers日志接入集中审计# 安装rsyslog客户端若未安装 yum install rsyslog -y # 配置rsyslog转发TCP Wrappers日志 cat /etc/rsyslog.conf EOF # Forward tcpwrap logs to central server if $programname tcpd then 10.0.1.100:514 stop EOF # 重启rsyslog systemctl restart rsyslog至此一个覆盖身份认证、连接控制、服务授权三层的安全远程访问体系在CentOS 7.6上完整落地。整个过程耗时约70分钟但换来的是23台节点未来3年的稳定与安全。5. 常见问题与排查技巧实录那些文档里不会写的血泪教训5.1 密钥登录失败的7种真实场景与秒级定位法在23台节点的实施中密钥登录失败是最高频问题。以下是7种真实场景及对应排查命令按出现概率排序场景表现秒级定位命令根本原因修复方案1. 权限错误Permission denied (publickey)且sshd日志无记录ls -ld ~/.ssh; ls -l ~/.ssh/authorized_keys.ssh目录权限非700或authorized_keys非600chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys2. SELinux阻止登录失败/var/log/secure显示setroubleshoot: SELinux is preventing /usr/sbin/sshd from read access on the file authorized_keysausearch -m avc -ts recent | audit2whySELinux策略禁止sshd读取authorized_keysrestorecon -Rv ~/.ssh3. 密钥类型不匹配no mutual signature algorithmssh -vvv userhost 21 | grep client-server客户端支持ed25519服务端sshd_config未启用PubkeyAuthentication检查sshd_config中PubkeyAuthentication yes是否生效4. PAM模块冲突登录时卡住数秒后失败/var/log/secure有pam_access(sshd:auth): access denied for usergrep pam_access /etc/pam.d/sshd/etc/security/access.conf中限制了用户登录注释掉access.conf中相关行或添加 : admin : ALL5. ssh-agent干扰有时成功有时失败ssh-add -lagent中存有多个密钥sshd随机选择导致失败ssh-add -D清空agent或在config中加IdentitiesOnly yes6. DNS反向解析超时连接缓慢sshd日志有reverse mapping checking getaddrinfo for xxx failedtimeout 2 nslookup 192.168.1.100服务端DNS配置错误导致反向解析超时在/etc/hosts中添加192.168.1.100 node100或关掉GSSAPIGSSAPIAuthentication no7. 密钥被篡改sign_and_send_pubkey: signing failed: agent refused operationssh-add -l私钥文件被文本编辑器意外修改如Windows换行符用file ~/.ssh/id_ed25519确认是ASCII text否则用dos2unix修复实操心得第1、2、6条占失败案例的87%。我现在的标准动作是遇到Permission denied (publickey)第一反应不是重生成密钥而是执行ls -l ~/.ssh和ausearch -m avc -ts today。这两个命令能在10秒内定位90%的问题。5.2 TCP Wrappers规则不生效的3大元凶规则写了却没效果别急着怀疑TCP Wrappers失效先查这三处元凶1服务未链接libwrap.soTCP Wrappers依赖libwrap.so动态库但并非所有服务都编译时链接了它。验证方法ldd $(which sshd) \| grep libwrap # 应输出libwrap.so.0 /lib64/libwrap.so.0 (0x00007f...) # 若无输出说明sshd未启用TCP Wrappers修复重新编译OpenSSH时加--with-libwrap参数或改用iptables替代。元凶2hosts.allow/deny文件权限错误/etc/hosts.allow权限必须为644/etc/hosts.deny同理。若设为600sshd会因无读取权限而忽略文件。验证ls -l /etc/hosts.*修复chmod 644 /etc/hosts.allow /etc/hosts.deny元凶3规则语法中的空格陷阱TCP Wrappers对空格极其敏感。以下写法均错误sshd : 192.168.1.0/24冒号前后有空格sshd:192.168.1.0/24冒号后无空格正确写法sshd: 192.168.1.0/24冒号后一个空格验证tcpdmatch -d sshd 192.168.1.50-d参数显示调试信息可看到规则解析过程5.3 SSH客户端连接超时的终极诊断树当ssh userhost卡住不动按此顺序排查每步不超过30秒网络层ping -c 3 host→ 若不通查物理链路或防火墙端口层nc -zv host 22→ 若连接拒绝查sshd是否运行systemctl status sshd服务层ssh -o ConnectTimeout5 -o BatchModeyes userhost→ 若超时查sshd日志journalctl -u sshd -n 50认证层ssh -vvv userhost 21 | head -50→ 观察最后几行若停在debug1: Next authentication method: publickey说明密钥未被接受TCP Wrappers层tcpdmatch sshd your_ip→ 若返回no说明被hosts.deny拦截个人体会第4步的ssh -vvv是神技。它会打印每一行握手细节比如我曾发现日志停在debug1: kex: algorithm: curve25519-sha256libssh.org这才意识到是客户端OpenSSH版本太低7.4不支持服务端要求的密钥交换算法。升级客户端OpenSSH后问题立解。6. 运维长效保障如何让这套体系持续可靠运行3年以上6.1 自动化巡检脚本每天凌晨检查核心项把以下脚本存为/usr/local/bin/ssh-security-check.sh加入crontab每日执行#!/bin/bash # CentOS 7.6 SSH安全巡检脚本 LOGFILE/var/log/ssh-security-check.log echo $(date) $LOGFILE # 检查sshd配置语法 if sshd -t 2/dev/null; then echo OK: sshd_config syntax valid $LOGFILE else echo ERROR: sshd_config syntax invalid! $LOGFILE systemctl status sshd $LOGFILE fi # 检查密钥权限 if [ $(stat -c %a ~/.ssh) 700 ] [ $(stat -c %a ~/.ssh/authorized_keys) 600 ]; then echo OK: SSH directory and key permissions correct $LOGFILE else echo ERROR: SSH permissions incorrect! $LOGFILE fi # 检查TCP Wrappers日志是否可写 if touch /var/log/tcpwrap.log 2/dev/null; then echo OK: TCP Wrappers log writable $LOGFILE else echo ERROR: TCP Wrappers log not writable! $LOGFILE fi # 检查最近1小时是否有暴力破解 if grep Failed password /var/log/secure \| tail -10 \| wc -l | grep -q 0; then echo OK: No brute force attempts in last hour $LOGFILE else echo ALERT: Brute force attempts detected! $LOGFILE grep Failed password /var/log/secure \| tail -10 $LOGFILE fi添加定时任务# 每天凌晨2点执行 echo 0 2 * * * root /usr/local/bin/ssh-security-check.sh /etc/crontab6.2 密钥轮换标准化流程避免“密钥永不过期”的灾难密钥不是一次生成就一劳永逸。我们制定的轮换规则强制轮换周期Ed25519密钥每12个月轮换一次NIST SP 800-57建议轮换窗口提前30天通知所有用户新密钥与旧密钥并行生效15天自动化脚本# 生成新密钥并部署 ssh-keygen -t ed25519 -C centos
返回列表