ansible 修改 ssh 端口需先备份配置、双端口过渡、语法校验(sshd -t)、适配防火墙规则、reload 服务而非 restart、wait_for 验证新端口连通、ss 确认监听,最后清理旧端口并保留回滚能力。

直接修改 SSH 端口并重载配置,核心是用 Ansible 替代手动逐台操作,确保安全、一致、可回滚。关键不在于“改端口”本身,而在于改完后服务能正常监听、防火墙放行、旧连接不受影响、且有 fallback 机制。
修改 sshd_config 并验证语法
Ansible 应先更新 /etc/ssh/sshd_config 中的 Port 指令(支持多端口,建议保留原端口过渡期),再校验配置合法性,避免因语法错误导致 sshd 启动失败。
- 使用
lineinfile模块精准替换或追加 Port 行,例如设为Port 22和Port 2222双端口运行 - 执行
sshd -t校验配置:用command模块调用,并设changed_when: false避免误判变更 - 若校验失败,任务立即中断,防止后续重启导致失连
同步更新防火墙规则
端口改了但防火墙没开,新端口就无法访问。需根据系统类型(firewalld / ufw / iptables)自动适配规则。
- 对 firewalld:用
firewalld模块永久添加新端口,如port: 2222/tcp,并重载 firewall - 对 ufw:用
ufw模块state: enabled+rule: allow+port: "2222" - 务必在关闭旧端口前,确认新端口已放行且可连通——建议保留双端口至少一个维护窗口期
安全重启 SSH 服务并验证连通性
不能直接 systemctl restart sshd,否则可能断连。应采用 reload 方式平滑生效,并在新端口上做连接测试。
- 用
systemd模块执行state: reloaded(非 restarted),保持已有连接不断 - 在控制节点用
wait_for模块检测新端口是否响应,超时则失败退出 - 成功后,再通过
shell模块执行ss -tln | grep :2222确认监听状态
清理旧端口与回滚准备
双端口稳定运行一段时间(如 24 小时)后,才移除旧端口;同时保留 rollback playbook,应对意外情况。
- 回滚任务应包含:还原 sshd_config、移除新防火墙规则、reload sshd
- 将原始
sshd_config备份路径设为变量(如/etc/ssh/sshd_config.ansible_bak),并在 play 开头用copy模块备份 - 生产环境建议配合
serial: 1分批执行,避免集群批量失联











