如何在Linux上安装和配置SSH:2025年完整安全指南
SSH 是您服务器上最关键的单一访问点。配置不当的 SSH 设置可能在五分钟内被扫描互联网的自动化机器人攻破。无论您是在管理 VPS Hosting 环境、裸金属机器还是云实例,从第一天起正确锁定 SSH 都是不可妥协的。
在本指南中,您将学习如何安装 OpenSSH、安全配置它、实施基于密钥的身份验证,以及应用生产级加固技术——全部在 2025 年的 Linux 服务器上完成。
什么是 SSH,为什么它很重要?
SSH(安全外壳协议)是一种加密网络协议,允许用户通过互联网等不安全网络安全地连接到远程系统。客户端和服务器之间传输的所有数据都经过完全加密,使其成为远程服务器管理的行业标准。
默认情况下,SSH 在端口 22 上运行,并支持:
- 远程登录服务器和虚拟机
- 通过 SCP 和 SFTP 进行安全文件传输
- 远程命令执行和脚本自动化
- 用于安全流量路由的端口转发和隧道
- 用于图形应用程序访问的 X11 转发
SSH 是您的主要管理界面,请相应地对待它。
第一步:安装 OpenSSH 服务器
大多数现代 Linux 发行版都预装了 OpenSSH。如果缺少,请使用适合您发行版的包管理器进行安装。
Ubuntu / Debian
sudo apt update
sudo apt install openssh-server -yCentOS / RHEL / AlmaLinux / Rocky Linux
sudo yum install openssh-server -yFedora
sudo dnf install openssh-server -yArch Linux
sudo pacman -S openssh安装完成后,OpenSSH 服务器(sshd)和 OpenSSH 客户端均可使用,使您能够接受传入连接并连接到其他远程服务器。
第二步:启动并启用 SSH 服务
安装完成后,您需要启动 SSH 守护进程(sshd)并将其配置为在系统启动时自动运行。
启动 SSH 服务
sudo systemctl start ssh启用 SSH 开机自启
sudo systemctl enable ssh验证服务是否正在运行
sudo systemctl status ssh正常输出将以绿色显示 active (running)。如果您看到任何错误,请使用 journalctl -xe 检查系统日志以获取诊断详情。
第三步:了解 SSH 配置文件
SSH 的行为由一个主要配置文件控制:
/etc/ssh/sshd_config该文件控制一切——监听端口、身份验证方法、允许的用户、登录限制等。在进行更改之前,请务必创建备份:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak使用您喜欢的文本编辑器打开该文件:
sudo nano /etc/ssh/sshd_config进行任何更改后,在重启服务之前务必验证配置语法,以避免将自己锁定在外:
sudo sshd -t如果没有返回错误,则应用更改:
sudo systemctl restart ssh第四步:必要的 SSH 配置更改
4.1 更改默认 SSH 端口
端口 22 是自动扫描器和暴力破解机器人首先攻击的端口。将其更改为非标准端口可以显著减少日志中的噪音,并降低遭受机会性攻击的风险。
在 sshd_config 中找到以下行:
#Port 22取消注释并设置自定义端口(选择 1024 到 65535 之间尚未使用的数字):
Port 2222保存文件,验证并重启 SSH:
sudo sshd -t && sudo systemctl restart ssh> 重要提示:更改端口后立即更新防火墙规则(见第六步)。否则将导致您被锁定在服务器之外。
4.2 禁用通过 SSH 的 Root 登录
允许通过 SSH 直接进行 root 登录是最常见且最危险的错误配置之一。如果攻击者猜测或暴力破解了 root 密码,他们将获得对您系统的完全、不受限制的控制权。
找到以下指令:
PermitRootLogin yes将其更改为:
PermitRootLogin no用户应使用标准账户登录,并在必要时使用 sudo 提升权限。这创建了一个重要的审计层——每个特权操作都记录在命名用户账户下。
4.3 强制使用基于密钥的身份验证并禁用密码
基于密码的身份验证本质上容易受到暴力破解攻击。SSH 密钥对——数学上关联的公钥/私钥组合——在安全性上呈指数级提升。
找到并设置以下指令:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no> 警告:仅在您成功测试基于密钥的登录之后才禁用密码身份验证。在没有可用密钥的情况下禁用密码将永久锁定您的访问。
4.4 其他加固指令
在 sshd_config 中添加或修改这些设置,以实现加固的生产配置:
# Restrict login to specific users (replace 'youruser' with actual usernames)
AllowUsers youruser
# Disconnect idle sessions after 5 minutes
ClientAliveInterval 300
ClientAliveCountMax 2
# Limit authentication attempts per connection
MaxAuthTries 3
# Disable empty passwords
PermitEmptyPasswords no
# Disable X11 forwarding if not needed
X11Forwarding no
# Use only modern, secure protocol version
Protocol 2
# Restrict SSH to specific network interface (optional, replace with your IP)
ListenAddress 0.0.0.0第五步:生成和部署 SSH 密钥对
SSH 密钥身份验证用加密身份证明替代密码。以下是正确设置的方法。
第 5.1 步:在本地机器上生成密钥对
在您的本地工作站(而非服务器)上运行此命令:
ssh-keygen -t ed25519 -C "your_email@example.com"> 为什么选择 Ed25519? Ed25519 是一种现代椭圆曲线算法,比旧的 RSA 算法更快、更安全,且生成的密钥更短。它是 2025 年的推荐选择。
如果您的系统或工具出于兼容性原因需要 RSA,请使用 4096 位密钥:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"系统将提示您:
- 选择文件路径(按 Enter 接受默认值
~/.ssh/id_ed25519) - 设置可选密码短语(强烈推荐——这会在静态状态下加密您的私钥)
这将生成两个文件:
~/.ssh/id_ed25519 — 您的私钥。切勿分享。切勿将其复制到服务器。
~/.ssh/id_ed25519.pub — 您的公钥。这是安装到服务器上的内容。
第 5.2 步:将公钥复制到服务器
使用 ssh-copy-id 将您的公钥安全传输到远程服务器:
ssh-copy-id -p 2222 username@your_server_ip
将 username 替换为您的服务器账户名,将 your_server_ip 替换为实际 IP 地址。
此命令会自动将您的公钥附加到服务器上的 ~/.ssh/authorized_keys,并设置正确的权限。
手动方法(如果 ssh-copy-id 不可用):
cat ~/.ssh/id_ed25519.pub | ssh username@your_server_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
第 5.3 步:测试基于密钥的登录
在禁用密码身份验证之前,验证基于密钥的登录是否有效:
ssh -p 2222 username@your_server_ip
如果您成功连接而无需输入密码(或仅需输入密钥密码短语),则基于密钥的身份验证正常工作。现在您可以安全地在 sshd_config 中禁用密码身份验证。
第六步:为 SSH 配置防火墙
防火墙是您的第一道防线。始终将其配置为仅允许您正在使用的 SSH 端口。
使用 UFW(Ubuntu / Debian)
# Allow your custom SSH port
sudo ufw allow 2222/tcp
# Enable the firewall
sudo ufw enable
# Verify the rules
sudo ufw status verbose
使用 firewalld(CentOS / RHEL / Fedora)
# Add the custom SSH port
sudo firewall-cmd --permanent --add-port=2222/tcp
# Remove the default port 22 (optional, after confirming new port works)
sudo firewall-cmd --permanent --remove-service=ssh
# Reload firewall rules
sudo firewall-cmd --reload
按 IP 地址限制 SSH 访问
为了最大安全性,将 SSH 访问限制为已知的可信 IP 地址:
# UFW example: allow SSH only from a specific IP
sudo ufw allow from 203.0.113.10 to any port 2222 proto tcp
这在独立服务器上尤其有效,在这些服务器上您可以从固定办公室或 VPN IP 范围控制所有管理访问。
第七步:高级安全措施
7.1 安装和配置 Fail2Ban
Fail2Ban 监控 SSH 日志文件,并自动封禁显示暴力破解活动迹象的 IP 地址。
# Install Fail2Ban
sudo apt install fail2ban -y # Ubuntu/Debian
sudo yum install fail2ban -y # CentOS/RHEL
# Create a local configuration file
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
编辑 /etc/fail2ban/jail.local 并配置 SSH 监狱:
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
启动并启用 Fail2Ban:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
7.2 使用 SSH 配置文件进行客户端管理
在您的本地机器上,创建或编辑 ~/.ssh/config 以简化连接并强制执行安全设置:
Host myserver
HostName your_server_ip
User youruser
Port 2222
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
ServerAliveCountMax 3
使用此配置,您只需输入以下命令即可连接:
ssh myserver
7.3 SSH 双因素身份验证(2FA)
对于需要最高级别访问安全性的环境——例如生产数据库、金融系统或合规监管基础设施——考虑使用 Google Authenticator 或 Authy 添加基于 TOTP 的双因素身份验证,与 SSH 密钥配合使用。
sudo apt install libpam-google-authenticator -y
google-authenticator
然后配置 PAM 和 sshd_config 以同时要求密钥和一次性密码。这创建了真正的多因素身份验证流程。
第八步:测试和排查 SSH 故障
完成配置后,系统地验证一切是否按预期工作。
连接测试
ssh -p 2222 -v username@your_server_ip
-v 标志启用详细模式,打印连接每个阶段的详细调试信息——对于诊断身份验证失败非常有价值。
常见问题和解决方案
问题
可能原因
解决方案
Connection refused
SSH 未运行或端口错误
检查 systemctl status ssh 和防火墙规则
Permission denied (publickey)
密钥不在 authorized_keys 中或权限错误
验证 ~/.ssh/authorized_keys 存在,权限为 chmod 600
Host key verification failed
服务器指纹已更改
从 ~/.ssh/known_hosts 中删除旧条目
Connection timed out
防火墙阻止了端口
检查 UFW/firewalld 规则和云安全组
配置更改后被锁定
sshd_config 中的错误配置
使用控制台/KVM 访问恢复更改
诊断命令
# Check SSH service status
sudo systemctl status ssh
# View real-time SSH logs
sudo journalctl -u ssh -f
# Check which port SSH is listening on
sudo ss -tlnp | grep sshd
# Test configuration file syntax
sudo sshd -t
完整加固版 sshd_config 参考
以下是一个生产就绪的 sshd_config,包含本指南中所有安全建议:
# Network
Port 2222
ListenAddress 0.0.0.0
Protocol 2
# Authentication
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
MaxAuthTries 3
LoginGraceTime 30
# Session Management
ClientAliveInterval 300
ClientAliveCountMax 2
MaxSessions 5
# Access Control
AllowUsers youruser
# Features (disable what you don't need)
X11Forwarding no
AllowTcpForwarding no
GatewayPorts no
PermitUserEnvironment no
# Logging
SyslogFacility AUTH
LogLevel VERBOSE
为什么您的托管基础设施对 SSH 安全性至关重要
您的 SSH 配置安全性并非孤立存在——它在很大程度上依赖于底层基础设施。正确加固的 SSH 设置在已提供以下条件的服务器上最为有效:
DDoS 防护,在大流量攻击到达您的 SSH 端口之前将其吸收
NVMe 存储,用于快速日志写入和快速 Fail2Ban 响应时间
1 Gbps 网络端口,确保负载下的连接稳定性
KVM/控制台访问,作为意外将自己锁定在外时的带外恢复方法
AlexHost 的 VPS Hosting 计划包含以上所有功能,提供完整的 root 访问权限和对自定义防火墙配置的支持——使其成为部署本指南所述加固 SSH 设置的理想选择。
如果您需要控制面板来配合 SSH 管理服务器,请探索 VPS 控制面板,提供包括 cPanel、Plesk 和 DirectAdmin 在内的选项。对于管理多个 Web 资产的团队,共享虚拟主机提供了一个托管环境,其中 SSH 加固在基础设施层面处理。
如果您在 SSH 加固服务器旁边运行 SSL 安全的 Web 服务,将您的设置与受信任的 SSL 证书解决方案配合使用,可确保所有面向公众的服务实现端到端加密。
SSH 安全检查清单
在认为您的 SSH 配置已准备好投入生产之前,请使用此检查清单:
[ ] OpenSSH 服务器已安装并运行
[ ] 默认端口 22 已更改为自定义端口
[ ] Root 登录已禁用(PermitRootLogin no)
[ ] Ed25519 或 RSA-4096 密钥对已生成
[ ] 公钥已部署到服务器上的 authorized_keysMaxAuthTries 设置为 3 次或更少ClientAliveInterval 已配置为终止空闲会话sshd_config 语法已通过 sudo sshd -t 验证结论
正确安装和配置 SSH 是 Linux 系统管理中最基本的技能之一。默认的 SSH 安装是一种负担;加固的 SSH 配置是一种资产。通过遵循本指南,您已经:
- 安装并启动了 OpenSSH 服务器
- 更改了默认端口并禁用了 root 登录
- 实施了加密强度高的基于密钥的身份验证
- 配置了防火墙规则以限制访问
- 部署了 Fail2Ban 以阻止暴力破解尝试
- 建立了完整的故障排查方法论
正确配置后,SSH 成为远程管理、自动化管道和系统间加密通信的强大、可靠且安全的网关。结合强大的托管基础设施——例如 AlexHost 具有硬件级 DDoS 缓解功能的独立服务器——您拥有了一个真正难以被攻破的基础。
定期重新审视您的 SSH 配置。每年轮换您的密钥。监控您的日志。安全不是一次性任务——它是一种持续的实践。
