Skip to content

🔑 SSH 密钥:打造赛博堡垒的免密通行证

🌱 创建: 2026/04/15 ⏱️ 更新: 2026/05/22

This content is not available in your language yet.

第一部分:锻造你的专属钥匙 (生成密钥对)

Section titled “第一部分:锻造你的专属钥匙 (生成密钥对)”

SSH 密钥认证的原理很简单:生成一把公钥(锁芯)和一把私钥(钥匙)。你把公钥放到服务器上,自己拿着私钥。以后只要私钥和公钥对上了,大门自动敞开。

我们将在你本地的电脑(如你的 Mac 或 Windows 电脑)上生成这对钥匙。

1. 生成现代安全的 Ed25519 密钥(已有密钥可跳过)

Section titled “1. 生成现代安全的 Ed25519 密钥(已有密钥可跳过)”

打开本地电脑的终端(Terminal 或 PowerShell),输入以下命令:

Terminal window
ssh-keygen -t ed25519 -C "你的邮箱或备注名"

科普小贴士:以前大家常用 rsa 算法,但现在更推荐 ed25519。它不仅安全性更高,生成的密钥长度也更短,连接速度更快。

按下回车后,系统会问你几个问题:

  1. Enter file in which to save the key... (保存位置): 直接按 回车,使用默认路径(通常是 ~/.ssh/id_ed25519)。
  2. Enter passphrase (empty for no passphrase): (私钥密码): 这是给你的私钥再加一层密码。为了追求绝对的“免密丝滑”,日常家用服务器这里可以直接按回车留空
  3. Enter same passphrase again:: 再次按 回车 确认。

生成完毕后,你的 ~/.ssh/ 目录下会多出两个文件:

  • id_ed25519:这是你的私钥(你的绝对凭证,打死也不能发给任何人)。
  • id_ed25519.pub:这是你的公钥(可以随意公开,接下来要传给服务器的就是它)。

第二部分:为服务器换上新锁芯 (上传公钥)

Section titled “第二部分:为服务器换上新锁芯 (上传公钥)”

现在,我们需要把刚刚生成的公钥 (.pub 文件) 扔到你的 Linux 虚拟机或服务器上。

方法一:使用一键命令(最简单,强烈推荐)

Section titled “方法一:使用一键命令(最简单,强烈推荐)”

在你的本地终端中,直接执行以下命令(将 <你的用户名><服务器IP> 替换为真实信息):

Terminal window
ssh-copy-id <你的用户名>@<服务器IP>

系统会最后一次要求你输入这台服务器的 SSH 登录密码。验证通过后,公钥就会被自动写入到服务器的 ~/.ssh/authorized_keys 文件中。

方法二:手动复制(当方法一不可用时)

Section titled “方法二:手动复制(当方法一不可用时)”
  1. 在本地电脑终端输入 cat ~/.ssh/id_ed25519.pub,将屏幕上输出的这一长串字符全部复制
  2. 登录到你的服务器,执行:
    Terminal window
    mkdir -p ~/.ssh
    nano ~/.ssh/authorized_keys
  3. 将复制的公钥粘贴进去,按 Ctrl+O 保存,Ctrl+X 退出。

🎉 测试一下: 现在,在本地终端输入 ssh <你的用户名>@<服务器IP>。你会发现,系统再也不问你要密码了,直接秒进服务器!


第三部分:配置 Config 文件 - 终极丝滑体验

Section titled “第三部分:配置 Config 文件 - 终极丝滑体验”

虽然免密了,但每次都要记住并输入 ssh <你的用户名>@<服务器IP> -p 2222 这一大串依然很反人类。我们可以通过配置本地的 ~/.ssh/config 文件来简化这一切。

本地电脑的终端执行:

Terminal window
nano ~/.ssh/config

将你的服务器信息按照以下模板填入并保存:

# 我的 Proxmox 主节点
Host pve
HostName 192.168.100.50
User root
Port 22
IdentityFile ~/.ssh/id_ed25519
# 跑 Docker 的 Debian 虚拟机
Host docker
HostName 192.168.100.60
User cyberbuilder
Port 22
# 远端的云服务器(假如端口改成了 2222)
Host vps
HostName 123.45.67.89
User ubuntu
Port 2222

参数说明:

  • Host:你想给这台机器起的“小名”(快捷方式)。
  • HostName:机器的真实 IP 或域名。
  • User:登录时使用的用户名。
  • Port:SSH 端口,如果是默认的 22 可以不写。
  • IdentityFile:指定使用的私钥路径(如果有多个私钥才需要写,默认会自动找 id_ed25519)。

配置好之后,你再也不需要敲 IP 和用户名了。想登录 PVE 节点?只需在本地终端输入:

Terminal window
ssh pve

回车,瞬间进入系统。优雅,永不过时。


🛡️ 终极防御:关闭密码登录 (可选但强烈建议)

Section titled “🛡️ 终极防御:关闭密码登录 (可选但强烈建议)”

既然钥匙已经配好了,为了防止网上的黑客使用字典暴力破解你的密码,最安全的做法是彻底封死密码登录这条路

⚠️ 警告:在执行此操作前,请务必确保你的 SSH 密钥免密登录已经测试成功!否则你可能会把自己锁在外面!

  1. 免密登录到你的服务器。
  2. 编辑 SSH 守护进程配置文件:
    Terminal window
    sudo nano /etc/ssh/sshd_config
  3. 找到 PasswordAuthentication 这一项。如果前面有 # 号,把 # 删掉,并将后面的 yes 改成 no
    PasswordAuthentication no
  4. 保存退出后,重启 SSH 服务:
    Terminal window
    sudo systemctl restart ssh
    (注:部分系统如 CentOS 是 systemctl restart sshd)

至此,你的服务器已经化身为一座固若金汤的堡垒,只认你手中的唯一一把钥匙。

  • 权限问题: SSH 对文件权限极其敏感。如果配置后依然要求输入密码,请检查服务器端的权限: 服务器上的 ~/.ssh 目录权限必须是 700~/.ssh/authorized_keys 文件的权限必须是 600
  • 密钥丢失: 重装本地电脑系统前,千万记得备份你的 ~/.ssh/ 文件夹,否则服务器将无法登录,只能通过 PVE 的 VNC 控制台进去救砖了。

Last updated: