Ubuntu CentOS 安装配置SSH完整教程
Ubuntu CentOS 安装配置SSH完整教程摘要本文提供了一份面向生产环境的 Linux SSH 终极部署指南深度兼容 CentOS 7/8/9 与 Ubuntu 20.04 系统。教程不仅清晰对比了双系统在 systemd 服务名、防火墙及 SELinux 配置上的核心差异还规范了基于 ed25519 算法的密钥登录与安全加固流程。特别新增 Fail2Ban 自动防御配置有效拦截 SSH 暴力破解。文末附带一键自动化初始化脚本帮助运维人员快速实现 SSH 服务的标准化安装与全方位安全加固。本文提供了一份面向生产环境的 Linux SSH 终极部署指南深度兼容 CentOS 7/8/9 与 Ubuntu 20.04 系统。教程不仅清晰对比了双系统在 systemd 服务名、防火墙及 SELinux 配置上的核心差异还规范了基于 ed25519 算法的密钥登录与安全加固流程。特别新增 Fail2Ban 自动防御配置有效拦截 SSH 暴力破解。文末附带一键自动化初始化脚本帮助运维人员快速实现 SSH 服务的标准化安装与全方位安全加固。前置说明与版本提醒服务端组件CentOS 7/Ubuntu 18.04 默认仅预装客户端缺少的是服务端openssh-server。核心差异两系统配置文件路径一致但防火墙工具、systemd 服务名及包管理器命令存在显著区别。安全铁律安全加固的执行顺序至关重要——必须先配置并测试密钥登录成功最后再禁用密码登录否则极易将自己锁在服务器之外。版本提醒CentOS 7 已于 2024 年 6 月 30 日停止维护EOL生产环境强烈建议迁移至 Rocky Linux、AlmaLinux 或 CentOS Stream。一、CentOS 7/8/9 安装配置SSH1. 安装 openssh 服务端# CentOS 7yuminstallopenssh-server-y# CentOS 8/9/Rocky/AlmaLinux 等dnfinstallopenssh-server-y2. 启动 开机自启systemctl start sshd systemctlenablesshd systemctl status sshd提示也可用一条命令完成启动并设为开机自启systemctl enable --now sshd3. firewalld 防火墙放行 22 端口firewall-cmd--permanent--add-port22/tcp firewall-cmd--reloadfirewall-cmd --list-ports# 验证规则4. SELinux 注意事项CentOS 特有使用默认 22 端口无需任何操作。若修改端口如改为 2222需安装必要工具并放行# 安装 semanage 工具注意区分系统版本yuminstallpolicycoreutils-python-y# CentOS 7dnfinstallpolicycoreutils-python-utils-y# CentOS 8/9/RHEL 8# 放行新端口semanage port-a-tssh_port_t-ptcp22225. 配置文件路径/etc/ssh/sshd_config。修改后需重载服务systemctl restart sshd。二、Ubuntu 20.04/22.04/24.04 安装配置SSH1. 安装 openssh 服务端sudoaptupdatesudoaptinstallopenssh-server-y2. 启动 开机自启注意Ubuntu 的服务名是ssh不是sshdsudosystemctl startsshsudosystemctlenablesshsudosystemctl statusssh# 一条命令启动自启sudosystemctlenable--nowssh3. UFW 防火墙放行 22 端口sudoufwenable# 若防火墙未启用sudoufw allow22/tcpsudoufw status verbose# 验证规则4. 配置文件路径/etc/ssh/sshd_config与 CentOS 完全一致。重载服务sudo systemctl restart ssh。三、SSH密钥登录与禁用密码详细步骤通用以下步骤在客户端执行。1. 生成密钥对推荐 ed25519# 使用更安全、更快的 ed25519 算法ssh-keygen-ted25519预期交互过程Generating public/private ed25519 key pair. Enterfileinwhichto save the key(/home/youruser/.ssh/id_ed25519): ← 直接回车 Enter passphrase(emptyforno passphrase): ← 设密码或回车留空 Enter same passphrase again: ← 确认生成的文件私钥自己保留严禁泄露~/.ssh/id_ed25519公钥上传服务器~/.ssh/id_ed25519.pub兼容性说明极少数旧系统不支持 ed25519此时可改用ssh-keygen -t rsa -b 4096。2. 将公钥上传到远程服务器使用ssh-copy-id自动完成# 格式ssh-copy-id 用户名服务器IPssh-copy-id admin192.168.1.100首次连接会提示确认指纹输入yes然后输入远程用户的密码。公钥将被自动追加到服务器的~/.ssh/authorized_keys文件中。3. 测试密钥登录sshadmin192.168.1.100若无需输入密码即进入服务器则密钥配置成功。排错提示若仍需密码执行ssh -v admin192.168.1.100查看详细日志检查服务器端~/.ssh目录权限为 700authorized_keys为 600。4. 禁用密码登录服务器端操作务必确认上一步测试成功后再执行编辑服务器/etc/ssh/sshd_configsudovi/etc/ssh/sshd_config修改或添加以下两项注意 Ubuntu 22.04 的新参数PasswordAuthentication no # Ubuntu 22.04 (OpenSSH 8.7) 使用新参数替代 ChallengeResponseAuthentication KbdInteractiveAuthentication no # 旧版 Ubuntu/CentOS 保留兼容 ChallengeResponseAuthentication no保存后检查配置语法# CentOS / Ubuntu 通用检查命令需 root 权限sudosshd-t若无输出表示语法正确。然后重启服务CentOS:systemctl restart sshdUbuntu:sudo systemctl restart ssh。保持当前窗口不要断开另开新终端尝试密钥登录确认正常后再关闭原会话。四、修改 SSH 默认 22 端口两系统通用编辑/etc/ssh/sshd_configPort 2222 # 自定义高端口1024-65535 # 建议先保留 Port 22 作为回退测试成功后再删除防火墙放行新端口# CentOSfirewall-cmd--permanent--add-port2222/tcp firewall-cmd--reload# 若使用 SELinux 且非默认端口semanage port-a-tssh_port_t-ptcp2222# Ubuntusudoufw allow2222/tcp重启 SSH 服务另开窗口用新端口测试连接ssh -p 2222 admin服务器IP。测试成功后再移除配置中的Port 22并删除防火墙 22 端口规则。五、安装配置 Fail2Ban 防暴力破解通用Fail2Ban 通过监控系统日志自动识别并封禁多次尝试登录失败的恶意 IP是 SSH 安全的最后一道防线。1. 安装 Fail2Ban# CentOS 7/8/9 (需要先安装 EPEL 源)yuminstallepel-release-y# CentOS 7dnfinstallepel-release-y# CentOS 8/9yuminstallfail2ban-y# 或 dnf install fail2ban -y# Ubuntu 20.04sudoaptinstallfail2ban-y2. 创建并编辑本地配置文件注意永远不要直接修改jail.conf应创建jail.local以避免系统升级时被覆盖。sudocp/etc/fail2ban/jail.conf /etc/fail2ban/jail.localsudovi/etc/fail2ban/jail.local3. 配置 SSH 防护规则在jail.local中找到[sshd]段落修改或添加以下参数[sshd] enabled true # 如果修改了 SSH 端口此处需改为新端口如 port 2222 port ssh filter sshd # CentOS 日志路径为 /var/log/secureUbuntu 为 /var/log/auth.log logpath /var/log/secure maxretry 3 # 10分钟内允许失败3次 findtime 600 # 检测时间窗口秒即10分钟 bantime 3600 # 封禁时长秒即1小时。生产环境可设为 86400 即24小时注意CentOS 的 SSH 日志路径是/var/log/secureUbuntu 是/var/log/auth.log请务必根据系统修改logpath。4. 启动并验证 Fail2Ban# 启动并设置开机自启sudosystemctlenable--nowfail2ban# 查看 Fail2Ban 运行状态及已封禁的 IPsudofail2ban-client status sshd# 查看 Fail2Ban 实时日志sudotail-f/var/log/fail2ban.log如果看到Banned IP list下有 IP 地址说明防护已生效。若需手动解封误封的 IP可使用sudo fail2ban-client set sshd unbanip IP地址。六、CentOS vs Ubuntu 核心区别速查操作项CentOS 7/8/9Ubuntu 20.04systemd 服务名sshdssh启动命令systemctl start sshdsudo systemctl start ssh开机自启systemctl enable sshdsudo systemctl enable ssh防火墙firewalldufw放行 22 端口firewall-cmd --add-port22/tcpsudo ufw allow 22/tcpSELinux开启改端口需 semanage无默认 root 登录允许禁止软件安装yum/dnf installsudo apt install配置文件路径/etc/ssh/sshd_config/etc/ssh/sshd_config一致SSH 日志路径/var/log/secure/var/log/auth.log七、常见排错命令双系统通用# 查看 ssh 监听端口ss-tuln|grepssh# 测试配置文件是否正确至关重要sudosshd-t# 查看登录日志tail-f/var/log/secure# CentOStail-f/var/log/auth.log# Ubuntu# 客户端详细调试ssh-vadminIP# 查看 Fail2Ban 封禁状态sudofail2ban-client status sshd八、一键初始化脚本自动判断系统 基础加固将以下脚本保存为ssh-setup.sh赋予执行权限后以 root 身份运行Ubuntu 用sudo bash ssh-setup.sh。脚本会自动安装服务、放行防火墙并交互询问是否执行安全加固。#!/bin/bash# SSH 一键安装与基础加固脚本适用于 CentOS 7/8/9 和 Ubuntu 20.04# 运行方式sudo bash ssh-setup.shset-e# 前置检查确保以 root 权限运行if[[$EUID-ne0]];thenecho此脚本需要 root 权限运行请使用 sudo bash ssh-setup.shexit1fi# 检测操作系统if[-f/etc/os-release];then./etc/os-releaseOS$IDelseecho无法识别操作系统退出。exit1fiecho检测到系统$OS# 安装 openssh-serverinstall_ssh(){if[[$OScentos||$OSrhel||$OSrocky||$OSalmalinux]];thenifcommand-vdnf/dev/null;thendnfinstall-yopenssh-serverelseyuminstall-yopenssh-serverfielif[[$OSubuntu||$OSdebian]];thenaptupdateaptinstall-yopenssh-serverelseecho不支持的系统:$OSexit1fi}# 启动并设置开机自启start_service(){if[[$OScentos||$OSrhel||$OSrocky||$OSalmalinux]];thensystemctlenable--nowsshdechosshd 服务已启动并设为开机自启。elif[[$OSubuntu||$OSdebian]];thensystemctlenable--nowsshechossh 服务已启动并设为开机自启。fi}# 配置防火墙放行 22 端口config_firewall(){if[[$OScentos||$OSrhel||$OSrocky||$OSalmalinux]];thenifsystemctl is-active--quietfirewalld;thenfirewall-cmd--permanent--add-port22/tcp firewall-cmd--reloadechofirewalld 已放行 22/tcpelseechofirewalld 未运行跳过防火墙配置。fielif[[$OSubuntu||$OSdebian]];thenifcommand-vufw/dev/null;thenufw allow22/tcpechoufw 已放行 22/tcpelseechoufw 未安装跳过防火墙配置。fifi}# 基础安全加固需用户确认apply_hardening(){echoecho 基础安全加固选项 echo以下操作将echo 1. 禁止 root 直接通过 SSH 登录echo 2. 禁止密码登录仅允许密钥echo 3. 设置客户端空闲 5 分钟后自动断开echo重要请确保你已创建了普通用户并将公钥上传至该用户的 authorized_keys。read-p是否现在应用这些加固(y/N): confirmif[[$confirm!y$confirm!Y]];thenecho已跳过安全加固。returnfiSSHD_CONFIG/etc/ssh/sshd_configcp$SSHD_CONFIG${SSHD_CONFIG}.bak.$(date%s)echo已备份原配置。# 修改配置sed-is/^#\?PermitRootLogin.*/PermitRootLogin no/$SSHD_CONFIGsed-is/^#\?PasswordAuthentication.*/PasswordAuthentication no/$SSHD_CONFIGsed-is/^#\?ChallengeResponseAuthentication.*/ChallengeResponseAuthentication no/$SSHD_CONFIG# 兼容 Ubuntu 22.04 新参数sed-is/^#\?KbdInteractiveAuthentication.*/KbdInteractiveAuthentication no/$SSHD_CONFIG# 空闲超时grep-q^ClientAliveInterval$SSHD_CONFIG\sed-is/^ClientAliveInterval.*/ClientAliveInterval 300/$SSHD_CONFIG||\echoClientAliveInterval 300$SSHD_CONFIGgrep-q^ClientAliveCountMax$SSHD_CONFIG\sed-is/^ClientAliveCountMax.*/ClientAliveCountMax 2/$SSHD_CONFIG||\echoClientAliveCountMax 2$SSHD_CONFIG# 检查语法并重启服务sshd-tif[[$OScentos||$OSrhel||$OSrocky||$OSalmalinux]];thensystemctl restart sshdelsesystemctl restartsshfiecho安全加固已应用服务已重启。echo请保持当前窗口不要断开新开终端验证密钥登录是否正常。}# 主流程install_ssh start_service config_firewall apply_hardeningechoecho SSH 初始化完成。使用方法sudobashssh-setup.sh脚本会自动识别 CentOS/Ubuntu 并完成安装与防火墙配置最后询问是否加固回答y即可一键安全加固。