当前位置: 首页 > news >正文

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 安装配置SSH

1. 安装 openssh 服务端

# CentOS 7yuminstallopenssh-server-y# CentOS 8/9/Rocky/AlmaLinux 等dnfinstallopenssh-server-y

2. 启动 & 开机自启

systemctl start sshd systemctlenablesshd systemctl status sshd

提示:也可用一条命令完成启动并设为开机自启:systemctl enable --now sshd

3. firewalld 防火墙放行 22 端口

firewall-cmd--permanent--add-port=22/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-ptcp2222

5. 配置文件

路径:/etc/ssh/sshd_config。修改后需重载服务:systemctl restart sshd


二、Ubuntu 20.04/22.04/24.04 安装配置SSH

1. 安装 openssh 服务端

sudoaptupdatesudoaptinstallopenssh-server-y

2. 启动 & 开机自启

注意:Ubuntu 的服务名是ssh,不是sshd

sudosystemctl startsshsudosystemctlenablesshsudosystemctl statusssh# 一条命令启动+自启sudosystemctlenable--nowssh

3. 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 admin@192.168.1.100

首次连接会提示确认指纹,输入yes,然后输入远程用户的密码。公钥将被自动追加到服务器的~/.ssh/authorized_keys文件中。

3. 测试密钥登录

sshadmin@192.168.1.100

若无需输入密码即进入服务器,则密钥配置成功。

排错提示:若仍需密码,执行ssh -v admin@192.168.1.100查看详细日志;检查服务器端~/.ssh目录权限为 700,authorized_keys为 600。

4. 禁用密码登录(服务器端操作)

务必确认上一步测试成功后再执行!

编辑服务器/etc/ssh/sshd_config

sudovi/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 sshd;Ubuntu:sudo systemctl restart ssh)。
保持当前窗口不要断开,另开新终端尝试密钥登录,确认正常后再关闭原会话。


四、修改 SSH 默认 22 端口(两系统通用)

  1. 编辑/etc/ssh/sshd_config
Port 2222 # 自定义高端口(1024-65535) # 建议先保留 Port 22 作为回退,测试成功后再删除
  1. 防火墙放行新端口:
# CentOSfirewall-cmd--permanent--add-port=2222/tcp firewall-cmd--reload# 若使用 SELinux 且非默认端口semanage port-a-tssh_port_t-ptcp2222# Ubuntusudoufw allow2222/tcp
  1. 重启 SSH 服务,另开窗口用新端口测试连接:ssh -p 2222 admin@服务器IP
  2. 测试成功后,再移除配置中的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.04+sudoaptinstallfail2ban-y

2. 创建并编辑本地配置文件

注意:永远不要直接修改jail.conf,应创建jail.local以避免系统升级时被覆盖。

sudocp/etc/fail2ban/jail.conf /etc/fail2ban/jail.localsudovi/etc/fail2ban/jail.local

3. 配置 SSH 防护规则

jail.local中找到[sshd]段落,修改或添加以下参数:

[sshd] enabled = true # 如果修改了 SSH 端口,此处需改为新端口(如 port = 2222) port = ssh filter = sshd # CentOS 日志路径为 /var/log/secure,Ubuntu 为 /var/log/auth.log logpath = /var/log/secure maxretry = 3 # 10分钟内允许失败3次 findtime = 600 # 检测时间窗口(秒,即10分钟) bantime = 3600 # 封禁时长(秒,即1小时。生产环境可设为 86400 即24小时)

注意:CentOS 的 SSH 日志路径是/var/log/secure,Ubuntu 是/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.04+
systemd 服务名sshdssh
启动命令systemctl start sshdsudo systemctl start ssh
开机自启systemctl enable sshdsudo systemctl enable ssh
防火墙firewalldufw
放行 22 端口firewall-cmd --add-port=22/tcpsudo ufw allow 22/tcp
SELinux开启,改端口需 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-vadmin@IP# 查看 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.sh"exit1fi# 检测操作系统if[-f/etc/os-release];then./etc/os-releaseOS=$IDelseecho"无法识别操作系统,退出。"exit1fiecho"检测到系统:$OS"# 安装 openssh-serverinstall_ssh(){if[["$OS"=="centos"||"$OS"=="rhel"||"$OS"=="rocky"||"$OS"=="almalinux"]];thenifcommand-vdnf&>/dev/null;thendnfinstall-yopenssh-serverelseyuminstall-yopenssh-serverfielif[["$OS"=="ubuntu"||"$OS"=="debian"]];thenaptupdateaptinstall-yopenssh-serverelseecho"不支持的系统:$OS"exit1fi}# 启动并设置开机自启start_service(){if[["$OS"=="centos"||"$OS"=="rhel"||"$OS"=="rocky"||"$OS"=="almalinux"]];thensystemctlenable--nowsshdecho"sshd 服务已启动并设为开机自启。"elif[["$OS"=="ubuntu"||"$OS"=="debian"]];thensystemctlenable--nowsshecho"ssh 服务已启动并设为开机自启。"fi}# 配置防火墙放行 22 端口config_firewall(){if[["$OS"=="centos"||"$OS"=="rhel"||"$OS"=="rocky"||"$OS"=="almalinux"]];thenifsystemctl is-active--quietfirewalld;thenfirewall-cmd--permanent--add-port=22/tcp firewall-cmd--reloadecho"firewalld 已放行 22/tcp"elseecho"firewalld 未运行,跳过防火墙配置。"fielif[["$OS"=="ubuntu"||"$OS"=="debian"]];thenifcommand-vufw>/dev/null;thenufw allow22/tcpecho"ufw 已放行 22/tcp"elseecho"ufw 未安装,跳过防火墙配置。"fifi}# 基础安全加固(需用户确认)apply_hardening(){echo""echo">>> 基础安全加固选项 <<<"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_config"cp"$SSHD_CONFIG""${SSHD_CONFIG}.bak.$(date+%s)"echo"已备份原配置。"# 修改配置sed-i's/^#\?PermitRootLogin.*/PermitRootLogin no/'"$SSHD_CONFIG"sed-i's/^#\?PasswordAuthentication.*/PasswordAuthentication no/'"$SSHD_CONFIG"sed-i's/^#\?ChallengeResponseAuthentication.*/ChallengeResponseAuthentication no/'"$SSHD_CONFIG"# 兼容 Ubuntu 22.04+ 新参数sed-i's/^#\?KbdInteractiveAuthentication.*/KbdInteractiveAuthentication no/'"$SSHD_CONFIG"# 空闲超时grep-q"^ClientAliveInterval""$SSHD_CONFIG"&&\sed-i's/^ClientAliveInterval.*/ClientAliveInterval 300/'"$SSHD_CONFIG"||\echo"ClientAliveInterval 300">>"$SSHD_CONFIG"grep-q"^ClientAliveCountMax""$SSHD_CONFIG"&&\sed-i's/^ClientAliveCountMax.*/ClientAliveCountMax 2/'"$SSHD_CONFIG"||\echo"ClientAliveCountMax 2">>"$SSHD_CONFIG"# 检查语法并重启服务sshd-tif[["$OS"=="centos"||"$OS"=="rhel"||"$OS"=="rocky"||"$OS"=="almalinux"]];thensystemctl restart sshdelsesystemctl restartsshfiecho"安全加固已应用,服务已重启。"echo"请保持当前窗口不要断开,新开终端验证密钥登录是否正常。"}# 主流程install_ssh start_service config_firewall apply_hardeningecho""echo" SSH 初始化完成。"

使用方法:

sudobashssh-setup.sh

脚本会自动识别 CentOS/Ubuntu 并完成安装与防火墙配置,最后询问是否加固,回答y即可一键安全加固。

http://www.jsqmd.com/news/1093257/

相关文章:

  • 2026年Vue3项目架构从零到一:目录、分层、代码,每一行都给你说明白
  • ISP Pipeline中径向递减锐化方案实现(四)
  • 华为MetaERP Oracle EBS、SAP(S/4HANA)、华为 MetaERP 全体系深度对比 + 实操业务示例总览三大产品定位Oracle EBS R12:美国甲骨文传统成熟 ERP,
  • 深度解析STL缩略图生成器:Windows文件资源管理器3D预览完整实现指南
  • Day5:用户端用例执行与缺陷管理
  • 一、linux系统安装与环境准备
  • YgoMaster终极PvP对战指南:如何轻松实现局域网联机与好友对战
  • 基于大数据+Hadoop的多维度用户画像构建与个性化推荐应用研究
  • 中山市电感微久智造蜘蛛手编带机厂家
  • 游戏程序化内容生成地形建筑与任务
  • 【Excel】使用“数据透视表”统计所有项的工作量
  • Google Play大改版,AI全面进入 ,游戏出海的商店逻辑全变了
  • VerSprite推出Fork和Knife:专为现代软件开发速度打造的AI驱动型威胁建模与对抗性测试平台
  • 认知操作系统与组织死亡学:贾子理论大厦的元理论建构及其文明意涵
  • 部署 AI 总卡在依赖 / 端口?Hermes Windows 极简方案拆解
  • 把 Flask 搬进 ESP32,高中生自研嵌入式 Web 框架 MicroFlask !
  • 我觉得目前脚本速度已经足够快了-----再快就不像人了
  • 代码图片生成器推荐,浏览器搜索Carbon。
  • API Key 填了还是 401?先检查这 5 个地方
  • 华为MetaERP 财务 ERP 解决方案架构师(EBS+SAP+MetaERP 复合背景)全国需求现状 + 城市潜力分级一、全国整体市场需求(2026 年现状)1. 需求整体判断:结构性紧缺,复
  • 【限时解密】ChatGPT API费用优化白皮书(含23个真实客户账单审计案例+自动识别高成本prompt的CLI工具)——OpenAI Partner认证专家独家释放
  • 从Isaac物理引擎到85kg重载轮足机甲:全栈架构复盘与Sim-to-Real避坑指南
  • 重新掌控惠普暗影精灵性能:OmenSuperHub开源控制工具完全指南
  • 分布式量子计算与NetQMPI框架核心技术解析
  • 复盘:企业级 Agent 平台,落地踩过的坑
  • rabbitmq+websocket实时通知
  • dotnet 10 run file 支持多文件
  • JavaScript--错误处理
  • OpenClaw(龙虾)2026 最新安装部署终极指南
  • xref_data_to_array