跳到主要内容
注册无需实名认证
安云主机 AnYun VPS

教程 · 快速上手

配置 SSH 密钥登录,替换掉密码

难度

入门

预计时长

15 分钟

步骤

5

最近修订

基准系统

Debian 12

要点

配置 SSH 密钥登录,替换掉密码

SSH 密钥登录用一对 ed25519 密钥代替密码:私钥留在自己电脑上,公钥写进服务器的 ~/.ssh/authorized_keys。三步即可完成 —— 本地 ssh-keygen 生成密钥、把公钥安装到服务器、验证免密登录 —— 只有这三步都成功之后,才可以安全地关闭密码认证。

前置条件

开始之前,先确认这些都具备

  • 已经能用密码 SSH 登录服务器
  • 本地电脑上有终端(PowerShell、Windows 终端、macOS 终端或 Linux 终端)

操作步骤

5

  1. 步骤 01 / 05

    在本地生成一对 ed25519 密钥 #

    注意是在本地电脑上生成,不是在服务器上 —— 私钥永远不应该离开你自己的机器。ed25519 比传统 RSA 更短更快,现代 OpenSSH 全面支持。-C 后面的注释只是给自己看的标签,写清楚这把钥匙属于哪台设备,将来轮换时才知道该删哪一把。系统会提示设置 passphrase:请设置一个,它是私钥文件万一泄露时的最后一道锁。

    Shell
    ssh-keygen -t ed25519 -C "thinkpad-2026" -f ~/.ssh/id_ed25519
    
    # 生成两个文件:
    #   ~/.ssh/id_ed25519       私钥,绝不外传、绝不上传网盘
    #   ~/.ssh/id_ed25519.pub   公钥,可以随便贴
  2. 步骤 02 / 05

    把公钥安装到服务器 #

    macOS 与 Linux 用 ssh-copy-id 一条命令搞定;Windows 没有这个命令,用管道把公钥内容追加进服务器的 authorized_keys,效果完全一样。注意权限:~/.ssh 必须是 700,authorized_keys 必须是 600,权限过宽时 sshd 会直接忽略这个文件,而且不会给出明显提示。

    Shell
    # macOS / Linux
    ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 22022 [email protected]
    
    # Windows PowerShell(等价写法)
    type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh -p 22022 [email protected] "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
  3. 步骤 03 / 05

    验证免密登录确实生效 #

    开一个新的终端窗口测试,原来那个已登录的窗口先别关 —— 这是所有 SSH 改动的通用纪律。如果只提示输入 passphrase(你刚才设的那个)而不是服务器密码,说明密钥登录已经生效。

    Shell
    ssh -p 22022 [email protected]
    
    # 想看清楚它到底用了哪把钥匙,加 -v
    ssh -v -p 22022 [email protected] 2>&1 | grep -i "Offering\|Authentication succeeded"
  4. 步骤 04 / 05

    用 ~/.ssh/config 给服务器起个短名字 #

    每次敲 IP 和端口既啰嗦又容易记错。在本地写一段 config,之后 ssh hk1 就够了,scp、rsync 与 git 也都会读取这份配置。ServerAliveInterval 让长时间空闲的会话不被中间设备掐断,跨境链路上这个设置尤其值。

    配置文件
    # 本地 ~/.ssh/config(Windows 在 %USERPROFILE%\.ssh\config)
    Host hk1
        HostName 203.0.113.10
        User deploy
        Port 22022
        IdentityFile ~/.ssh/id_ed25519
        IdentitiesOnly yes
        ServerAliveInterval 30
        ServerAliveCountMax 3
  5. 步骤 05 / 05

    为团队或第二台设备追加公钥 #

    authorized_keys 一行一把公钥,可以放多把。给每台设备一把独立的钥匙,而不是把同一个私钥复制到几台电脑上 —— 这样丢了笔记本只需删掉对应的那一行,其他设备不受影响。

    Shell
    # 在服务器上查看当前已授权的公钥
    cat ~/.ssh/authorized_keys
    
    # 吊销某一把:删掉对应行即可(认准末尾的注释标签)
    sed -i '/thinkpad-2026$/d' ~/.ssh/authorized_keys

常见错误

这一步最容易踩的坑

下面每一条都对应一个真实会发生的故障。先读完再动手,比出问题之后再回来查要省时间。

  • 把私钥传到服务器上,是这一步最常见也最严重的错误。服务器上只放 .pub 结尾的公钥。
  • 权限不对是「配了却不生效」的头号原因:~/.ssh 要 700,authorized_keys 要 600,且属主必须是该用户本人。用 root 帮别的用户写文件时特别容易搞错属主。
  • passphrase 嫌麻烦可以交给 ssh-agent 缓存,但不要干脆不设。私钥文件躺在笔记本里,没有 passphrase 就等于一份明文密码。
  • 给新用户配好密钥之前就关闭密码登录,会把自己彻底锁在门外。顺序永远是:先验证密钥能进,再关密码。
  • 控制台的「重装系统」会清空 authorized_keys,重装后需要重新安装公钥。

这篇教程的边界

  • 命令以 Debian 12 为准。Ubuntu 与 Rocky Linux 的差异只在正文明确标注之处,未标注的部分请以你所用发行版的官方文档为准。
  • 示例中的 IP 来自文档保留段 203.0.113.0/24,域名为 example.com,端口为示意值。复制后必须替换成自己的值, 原样执行不会有任何效果。
  • 教程不能替代备份。任何会改动数据或线上流量的步骤,执行前先确认有一份验证过能恢复的备份。
  • 本站不提供任何用于绕过网络审查的配置或说明,这篇也不例外。

发现命令过时或有误,请发邮件到 [email protected]。 指出错误的邮件比沉默的旧文档有价值得多。

联系 工单
扫码
手机访问

扫码在手机上打开