15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
29.10.2024

如何在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 -y

CentOS / RHEL / AlmaLinux / Rocky Linux

sudo yum install openssh-server -y

Fedora

sudo dnf install openssh-server -y

Arch 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"

系统将提示您:

  1. 选择文件路径(按 Enter 接受默认值 ~/.ssh/id_ed25519
  2. 设置可选密码短语(强烈推荐——这会在静态状态下加密您的私钥)

这将生成两个文件:

    ~/.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_keys
  • [ ] 基于密钥的登录已成功测试
  • [ ] 密码身份验证已禁用
  • [ ] 防火墙已配置为仅允许新的 SSH 端口
  • [ ] Fail2Ban 已安装并配置
  • [ ] MaxAuthTries 设置为 3 次或更少
  • [ ] ClientAliveInterval 已配置为终止空闲会话
  • [ ] sshd_config 语法已通过 sudo sshd -t 验证
  • [ ] 带外控制台访问已确认(KVM/VNC)

结论

正确安装和配置 SSH 是 Linux 系统管理中最基本的技能之一。默认的 SSH 安装是一种负担;加固的 SSH 配置是一种资产。通过遵循本指南,您已经:

  1. 安装并启动了 OpenSSH 服务器
  2. 更改了默认端口并禁用了 root 登录
  3. 实施了加密强度高的基于密钥的身份验证
  4. 配置了防火墙规则以限制访问
  5. 部署了 Fail2Ban 以阻止暴力破解尝试
  6. 建立了完整的故障排查方法论

正确配置后,SSH 成为远程管理、自动化管道和系统间加密通信的强大、可靠且安全的网关。结合强大的托管基础设施——例如 AlexHost 具有硬件级 DDoS 缓解功能的独立服务器——您拥有了一个真正难以被攻破的基础。

定期重新审视您的 SSH 配置。每年轮换您的密钥。监控您的日志。安全不是一次性任务——它是一种持续的实践。

15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用