VPS 使用 SSH 密钥,免密登录详细教程

你是不是每次登录 VPS 都要输入一长串密码?更糟糕的是,如果密码设置得太简单,服务器可能随时面临暴力破解的风险。SSH 日志里每天都有成百上千次的登录尝试,看着就让人心慌。

其实,有一个更安全也更方便的方法:使用 SSH 密钥登录。SSH 密钥就像你家的指纹锁,只有你的指纹才能打开,别人想破解几乎不可能。配置好后,你将不再需要输入密码。

这篇文章我会手把手教你如何给 VPS 配置 SSH 密钥,实现免密登录。不管你用的是 Linux、Mac 还是 Windows,我都会详细讲解每一步操作。整个过程其实很简单,跟着做 10 分钟就能搞定。

什么是 SSH 密钥?为什么要使用 SSH 密钥?

SSH 密钥的工作原理

SSH 密钥其实是一对数字钥匙,由公钥私钥组成。你可以把公钥理解为一把锁,而私钥则是唯一能打开这把锁的钥匙,用来确保连接的安全与唯一性。

当你配置 SSH 密钥登录时,公钥放在 VPS 服务器上(相当于给服务器装锁),私钥保存在本地电脑中(钥匙在你手上)。每次连接时,系统会用私钥验证公钥,匹配成功即可登录,无需密码。

这种验证方式采用的是非对称加密算法,安全性远高于传统密码。即使有人在网络中进行监听,也无法获取或破解你的私钥内容,从而有效保障连接的安全。

为什么要配置 VPS 密钥
为什么要配置 VPS 密钥

为什么要使用 SSH 密钥?

你可能会问为什么要用 SSH 密钥登录?密码登录不是也挺方便的吗?其实,SSH 密钥登录不仅更安全,还能让管理多台服务器的体验更高效、更轻松。下面我们来看看它的几大优势:

  • 安全性大幅提升:传统密码容易被暴力破解,而 SSH 密钥采用非对称加密算法。一个 2048 位的 RSA 密钥几乎不可能被破解,安全性远超普通密码。
  • 免密登录更高效:配置完成后,只需执行 ssh user@your-server-ip 就能直接登录,再也不用反复输入密码。对同时管理多台 VPS 的用户来说,非常便利。
  • 支持禁用密码登录:设置 SSH 密钥后,你可以完全关闭服务器的密码登录功能。这样即使攻击者知道用户名,也无法通过密码尝试入侵,大幅降低暴力破解的风险。
  • 更适合自动化运维:无论是备份脚本、部署程序还是批量管理任务,SSH 密钥都能实现无人值守、安全可靠的自动连接,避免将密码明文写入脚本的安全隐患。

总的来说,SSH 密钥登录已经成为 VPS 安全管理的基础配置。掌握它,不仅能提升安全防护,也能让你的运维效率事半功倍。接下来,我们就一步步讲解如何正确配置 SSH 密钥登录。

生成 SSH 密钥对

现在的操作系统基本都自带了 SSH 工具,不管你用的是 Linux、Mac 还是 Windows 10/11,都可以直接用命令行生成 SSH 密钥。整个过程非常简单,几条命令就搞定了。

如果你是 Windows 用户并且习惯使用 PuTTY 工具,别着急,我会在后面单独讲解。由于 PuTTY 生成的密钥格式与常见的 OpenSSH 不同,所以需要专门介绍它的生成与使用方法。

打开终端

首先,你需要打开终端:

  • Windows:按 Win+R,输入”powershell” 或 “cmd”,回车打开
  • Mac:按 Command + 空格键,输入 “终端” 或 “Terminal” 打开
  • Linux:按 Ctrl + Alt + T 或在应用程序菜单里找到 “终端”

执行生成密钥命令

在终端里输入以下命令:

ssh-keygen -t rsa -b 4096 -C "注释信息"

让我来解释一下这条命令的每个部分:

  • ssh-keygen:这是生成 SSH 密钥的专用命令
  • -t rsa:指定密钥类型为 RSA 算法。RSA 是目前最常用也最兼容的加密算法
  • -b 4096:设置密钥长度为 4096 位。数字越大越安全,4096 是目前推荐的安全长度
  • -C “注释信息”:添加一个注释,这个注释会附加在公钥末尾,方便识别是谁的密钥

设置密钥保存位置

按下回车后,系统会问你密钥文件保存在哪里:

Enter file in which to save the key (/home/your_username/.ssh/id_rsa):

这里建议你直接按回车,使用默认位置。默认路径是:

  • Linux 和 Mac~/.ssh/id_rsa
  • WindowsC:\Users\你的用户名\.ssh\id_rsa

这个默认位置是 SSH 客户端自动查找密钥的地方,用默认位置最省事,连接服务器时不需要额外指定密钥文件路径。

设置密钥密码(Passphrase)

接下来系统会问你是否要给私钥设置一个密码:

Enter passphrase (empty for no passphrase):

这里我给你两个建议:

  • 如果追求最高安全性:设置一个密码。这样即使别人拿到了你的私钥文件,没有这个密码也用不了。但每次连接VPS时,你需要输入这个密钥密码(不是服务器密码)。
  • 如果追求便利性:直接按回车留空。这样连接服务器时完全不需要输入任何密码,一步到位。但你要确保你的电脑足够安全,不会被别人接触到。

我个人的做法是,个人电脑不设置密钥密码,因为我的电脑只有我自己用;但公司电脑会设置密码,毕竟安全第一。

如果你选择设置密码,输入后会要求你再输入一次确认:

Enter same passphrase again:

密钥生成完成

设置好后,你会看到类似这样的输出:

Your identification has been saved in /home/username/.ssh/id_rsa
Your public key has been saved in /home/username/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx zhangsan@gmail.com
The key's randomart image is:
+---[RSA 4096]----+
|    .o+*B=.      |
|     +=*=+.      |
|    ..o.Bo .     |
+----[SHA256]-----+

恭喜!你的 SSH 密钥对已经生成好了。在密钥保存位置会有两个文件:

  • id_rsa:这是你的私钥,千万不能泄露给任何人
  • id_rsa.pub:这是公钥,等会要上传到 VPS 服务器的就是这个文件

查看和获取公钥内容

现在我们需要查看公钥的内容,因为下一步要把它上传到 VPS。在终端输入:

cat ~/.ssh/id_rsa.pub

你会看到一长串文字,类似这样:

ssh-rsa AAAAB3...很长很长的字符串...xxxxx zhangsan@gmail.com

这就是你的公钥内容。它以 ssh-rsa 开头,中间是一大串加密字符,最后是你设置的注释。

重要提示:复制这段内容时,要从 ssh-rsa 开头一直复制到注释结尾,必须完整复制,一个字符都不能少。我建议你先把它复制到记事本里保存一下,下一步上传公钥时会用到。

私钥安全提醒

再强调一遍:私钥文件(id_rsa)绝对不能给任何人,也不要上传到任何地方。你的 VPS 安全就靠它了,泄露了私钥就等于把家门钥匙交给了别人。

只有公钥(id_rsa.pub)才需要上传到服务器,这个是专门用来公开的,不用担心安全问题。现在密钥已经生成好了,下一步我们就把公钥上传到 VPS 服务器上。

上传密钥到 VPS

现在你的本地电脑上已经有了 SSH 密钥对,下一步就是把公钥上传到 VPS 服务器。这个过程就像是把你家的锁安装到门上,只有你手里的钥匙才能打开。

上传公钥有两种方法,我会详细介绍每一种。你可以根据自己的情况选择最方便的方式。

方法一:使用 ssh-copy-id 命令直接推送(最简单)

如果你使用 Mac 或 Linux,并且能用密码登录 VPS,这个方法是最省事的。一条命令就能自动把公钥上传到服务器的正确位置,不用手动操作任何文件。

在本地电脑的终端里输入命令:

ssh-copy-id 用户名@服务器IP地址

比如你的用户名是 root,服务器 IP 是 192.168.1.100,那就输入:

ssh-copy-id root@192.168.1.100

如果你的 SSH 端口不是默认的 22,需要用 -p 参数指定端口号:

ssh-copy-id -p 端口号 用户名@服务器IP地址

执行命令后,系统会提示你输入服务器密码。这是最后一次需要输入密码了,输入正确的密码后按回车。你会看到类似这样的输出:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'root@192.168.1.100'"
and check to make sure that only the key(s) you wanted were added.

看到这个提示就说明公钥已经成功上传了。这个命令会自动帮你完成以下操作:

  • 连接到 VPS 服务器
  • 在服务器上创建 ~/.ssh 目录(如果不存在)
  • 把你的公钥添加到 ~/.ssh/authorized_keys 文件中
  • 自动设置正确的文件权限

一切都是自动的,你什么都不用管,非常方便。

方法二:手动登录服务器添加公钥

如果你的系统(Windows)不支持 ssh-copy-id 命令,或者你想更清楚地了解整个过程,可以选择手动上传公钥。这个方法稍微麻烦一点,但操作起来也不难。

首先在本地电脑查看并复制公钥内容:

cat ~/.ssh/id_rsa.pub

把显示出来的所有内容复制下来。记住,要从 ssh-rsa 开头一直复制到最后的注释,完整复制。

在终端输入命令登录服务器:

ssh 用户名@服务器IP地址

输入密码登录进去。登录成功后,先检查一下服务器上是否已经有 .ssh 目录:

ls -la ~ | grep .ssh

如果没有显示 .ssh 目录,就创建一个:

mkdir -p ~/.ssh

然后设置这个目录的权限。这一步很重要,如果权限不对,SSH 密钥登录会无效:

chmod 700 ~/.ssh

700 权限的意思是只有你自己能读写这个目录,其他人完全没有权限。SSH 对安全要求很高,权限设置不对它就不工作。

现在需要把刚才复制的公钥内容写入到 authorized_keys 文件中。你可以用 echo 命令追加:

echo "你复制的公钥内容" >> ~/.ssh/authorized_keys
上传公钥到 VPS
上传公钥到 VPS

注意这里用的是两个大于号 >>,表示追加内容,不会覆盖原有内容。如果文件不存在,系统会自动创建。或者你也可以用文本编辑器来编辑这个文件:

nano ~/.ssh/authorized_keys

把公钥内容粘贴进去,一行一个公钥。编辑完成后按 Ctrl+O 保存,再按 Ctrl+X 退出编辑器。如果你习惯用 vivim 编辑器,那就用自己顺手的工具,操作都是类似的。

最后一步,给 authorized_keys 文件设置正确的权限:

chmod 600 ~/.ssh/authorized_keys

600 权限表示只有你能读写这个文件,其他人完全不能访问。这个权限设置也是强制要求,不设置的话 SSH 会拒绝使用这个文件。

使用密钥连接 VPS

公钥上传完成后,激动人心的时刻到了:我们终于可以测试免密登录了。从现在开始,你再也不用输入那串又长又容易忘的密码了。

使用终端直接连接

最基本的连接方式就是在终端里直接输入 SSH 命令。操作和之前用密码登录时一模一样,但这次系统会自动使用你的私钥进行验证。

打开终端,输入连接命令:

ssh 用户名@服务器IP地址

比如:

ssh root@192.168.1.100

如果你的 SSH 端口不是默认的 22,需要加上 -p 参数指定端口:

ssh -p 端口号 用户名@服务器IP地址

按下回车后,你会发现系统不再要求输入密码了,直接就登录进去了。是不是特别爽?这就是 SSH 密钥的魅力所在。

如果这是你第一次连接这台服务器,系统会弹出一个提示,问你是否信任这台服务器:

The authenticity of host '192.168.1.100' can't be established.
RSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?

这是正常的安全提示,输入 yes 回车就行。系统会把这台服务器添加到信任列表里,下次连接就不会再问了。

如果你的私钥保存在非默认位置,连接时需要用 -i 参数指定私钥文件路径:

ssh -i /path/to/your/private_key 用户名@服务器IP地址

使用 Tabby 等终端工具连接

虽然命令行连接很方便,但如果你经常需要管理多台服务器,一个好用的终端工具会让你的工作效率大大提升。接下来我使用 Tabby 做演示。

打开 Tabby 后,点击右上角的设置图标,进入配置和连接。点击新建配置文件,选择 SSH 连接。然后在配置界面填写以下信息:

  • 名称:给这个连接起个名字
  • 主机:填写服务器 IP 地址
  • 端口:SSH 端口号,默认是 22
  • 用户名:你的服务器用户名

重点来了,在认证部分:

  • 认证方式:选择 “密钥”
  • 私钥文件:点击浏览,选择你之前生成的私钥文件(默认是 ~/.ssh/id_rsa
Tabby 使用 SSH 密钥
Tabby 使用 SSH 密钥

配置完成后点击保存,以后只要双击这个配置文件就能直接连接了,不需要每次都输入命令。

其他工具的 SSH 密钥配置方式都大同小异,基本都是在连接设置里选择私钥文件就行了。你可以根据自己的系统和使用习惯选择合适的工具。

如果你之前一直用 PuTTY 连接服务器,这里需要特别注意一点:PuTTY 不能直接使用我们刚才生成的 OpenSSH 格式私钥。后面我会单独介绍 PuTTY 的使用。

PuTTY 用户的 SSH 密钥配置教程

如果你是 Windows 用户,可能一直在用 PuTTY 这个经典的 SSH 工具。不过刚才我提到过,PuTTY 使用的密钥格式比较特殊,跟 OpenSSH 不兼容,所以需要单独讲解一下。

安装完整版 PuTTY

建议你安装 完整版的 PuTTY,这样可以一次性获得所有必要工具,包括用于生成密钥的 PuTTY Key Generator(puttygen.exe)

如果你已经下载了单独的 putty.exe,也没问题,只需再额外去 PuTTY 官网下载一个 puttygen.exe 即可。两者需要配合使用,一个负责连接服务器,另一个用于生成和管理 SSH 密钥。

方法一:直接用 PuTTY 生成密钥对

如果你还没有生成过密钥,或者想专门为 PuTTY 生成一对新密钥,这个方法最直接。

在开始菜单找到 “PuTTY Key Generator” 并打开,或者直接运行安装目录下的 puttygen.exe。打开工具后,你会看到一个简洁的界面。在底部的 “Parameters”(参数)区域:

  • Type of key to generate:选择”RSA”
  • Number of bits:建议设置为 4096,更安全

确认参数后,点击窗口中间的 “Generate” 按钮。

PuTTY 生成密钥对
PuTTY 生成密钥对

有趣的部分来了:PuTTY 会要求你在灰色空白区域随机移动鼠标,这是为了利用鼠标动作生成真正随机的密钥。就在这个区域随意移动几秒,密钥就会生成完成。

密钥生成完成后,你会看到一个以 ssh-rsa 开头的一长串字符,这是公钥内容,需要记录下来,用于上传到 VPS 服务器。前面有过详细说明,不再这里赘述。

接下来,你可以保存 PuTTY 的公钥文件和私钥文件。

保存私钥时,可以选择是否填写 Key passphrase(私钥密码) 并再次确认。如果不填写,系统会再次弹窗提示是否不设置密码,点击“是”即可。然后选择存储位置,完成私钥保存。

PuTTY 生成 SSH 密钥对
PuTTY 生成 SSH 密钥对

方法二:转换 OpenSSH 格式的私钥

如果你之前已经用命令行生成了 OpenSSH 格式的密钥(就是前面教程里的 id_rsa 文件),想在 PuTTY 中使用,就需要把它转换成 .ppk 格式。

打开 PuTTY Key Generator,点击菜单栏的 “File”“Load private key”(导入密钥)。在弹出的文件选择窗口里,找到你之前生成的私钥文件。默认位置是:

C:\Users\你的用户名\.ssh\id_rsa

注意这个文件没有扩展名,文件类型选择 “All Files (.)” 才能看到它。选中 id_rsa 文件,点击打开。如果你当时给私钥设置了密码,这时会提示你输入密码。

保存为 PuTTY 格式

导入后,窗口上方会显示对应的公钥内容。现在点击 “Save private key” 按钮,把这个私钥保存成 .ppk 格式。系统可能会再次询问是否设置密码,根据你的需求处理就行。

现在这个 .ppk 文件就是 PuTTY 使用的私钥文件,接下来就可以在 PuTTY 中直接使用了。原来的 id_rsa 文件也可以保留,不影响在其他终端工具中继续使用。

现在你就拥有了两个版本的私钥:OpenSSH 格式和 PuTTY 格式,可以在不同工具中随意切换。

使用 PuTTY 连接 VPS

密钥准备好了,现在来配置 PuTTY 连接。运行 putty.exe,你会看到熟悉的配置界面。在左侧分类树中选择 “Session”(会话),在右侧填写:

  • Host Name:服务器 IP 地址
  • Port:SSH 端口,默认 22
  • Connection type:选择”SSH”

接下来是关键步骤。在左侧分类树中依次展开:

Connection(连接)SSHAuth(授权)Credentials

在右侧界面的底部,你会看到 “Private key file for authentication”(用于身份验证的私钥文件)。点击后面的 “Browse” 按钮,选择你刚才保存的 .ppk 私钥文件,点击打开。

PuTTY 使用 SSH 密钥
PuTTY 使用 SSH 密钥

为了以后方便连接,我们可以这个配置保存下来。回到左侧的 “Session”,再 “Saved Session”那里输入一个名字,比如 “我的某某 VPS”,然后点击 “Save” 按钮。

配置完成后,点击窗口底部的 “Open” 按钮。之后你就会看到熟悉的黑色终端窗口,这时候需要你输入要登陆的账号,然后回车进行 VPS 连接,不需要再输入密码。

PuTTY 使用密钥登录成功
PuTTY 使用密钥登录成功

好了,到这里 PuTTY 的 SSH 密钥配置就全部完成了。虽然步骤稍微多一点,但配置一次后就能一劳永逸。不管你用的是 PuTTY、Tabby 还是命令行,现在都可以用密钥轻松登录 VPS 了。

禁用密码登录,进一步提升安全性

现在你已经可以用 SSH 密钥轻松登录 VPS 了,但服务器上的密码登录功能还是开着的。这意味着攻击者依然可以尝试用密码暴力破解你的服务器。所以建议彻底关掉密码登录。

为什么要禁用密码登录

你可能注意到过,VPS 的日志里每天都有成百上千次失败的登录尝试。那些都是自动化脚本在扫描互联网上的服务器,试图用常见的用户名和密码组合进行暴力破解。

虽然你的密码可能很复杂,但这些持续不断的攻击总是让人不安。

禁用密码登录后,服务器只能使用 SSH 密钥验证,即使攻击者知道你的用户名和密码也完全无法登录。这就像把家里的钥匙锁换成了指纹锁,没有你的指纹,钥匙再多也没用。

确认密钥登录正常工作

在禁用密码登录之前,务必先确认你的密钥登录已经完全正常。试着退出当前连接,重新用密钥登录几次,确保每次都能顺利进入。

重要提醒:不要在当前的 SSH 连接里直接修改配置,万一配置出错你就被锁在外面了。建议保持一个 SSH 连接不要断开,然后另外开一个终端测试新连接,确认没问题后再修改配置。

修改 SSH 配置文件

确认密钥登录没问题后,我们来修改服务器的 SSH 配置。登录到 VPS,用文本编辑器打开 SSH 的配置文件:

sudo nano /etc/ssh/sshd_config

如果你习惯用 vi 或 vim,用自己顺手的编辑器就行。在文件中找到这一行:

#PasswordAuthentication yes

或者可能是:

PasswordAuthentication yes

把它改成:

PasswordAuthentication no

注意要删掉前面的 # 号(如果有的话),因为 # 表示注释,配置不会生效。为了更安全,你还可以禁用 root 用户的直接登录。找到这一行:

#PermitRootLogin yes

改成:

PermitRootLogin no

这样即使有人拿到了 root 密钥,也无法直接以 root 身份登录,必须先登录普通用户再切换。当然,如果你平时就是用 root 登录的,这一条可以不改。

修改完成后,按 Ctrl+O 保存文件,再按 Ctrl+X 退出编辑器。

重启 SSH 服务

配置修改后需要重启 SSH 服务才能生效。执行以下命令:

sudo systemctl restart sshd

或者在某些系统上是:

sudo service ssh restart

重启完成后,SSH 服务会立即应用新配置。你当前的连接不会断开,但新的连接就只能用密钥登录了。但别急着关闭当前的连接

测试新配置

为了安全,用另一个终端使用 SSH 密钥进行登录测试。如果测试成功,恭喜你,配置完成了。如果发现登录不了,你还可以在当前保持的连接里改回配置。

测试时可以故意用密码登录试试,应该会看到 “Permission denied”(权限拒绝)的提示,这说明密码登录已经成功禁用了。

总结

到这里,VPS 使用 SSH 密钥免密登录的教程就全部讲完了。

我们从 SSH 密钥的基本原理开始,了解了它为什么比传统密码更安全、更方便。然后详细讲解了如何生成密钥对,不管你用的是 Windows、Mac 还是 Linux,都可以通过简单的命令快速完成。

接着介绍了两种上传公钥到 VPS 的方法:自动的 ssh-copy-id 命令和手动添加公钥。配置完成后,我们测试了如何用终端命令和 Tabby 等工具连接服务器,整个过程完全不需要输入密码。

最后专门为 PuTTY 用户写了一节教程,包括如何用 PuTTY Key Generator 生成密钥、如何转换 OpenSSH 格式的私钥,以及如何在 PuTTY 中配置密钥连接。

现在你的 VPS 已经实现了安全便捷的免密登录,再也不用担心密码被暴力破解了。

常见问题解答(FAQ)

Q1:使用 SSH 密钥后,连接时还是要求输入密码怎么办?

这是新手最常遇到的问题。

首先检查公钥是否正确添加到服务器的 ~/.ssh/authorized_keys 文件中,内容要完整,从 ssh-rsa 开头到注释结尾,一个字符都不能少。

其次,检查服务器上的文件权限:.ssh 目录必须是 700 权限,authorized_keys 文件必须是 600 权限。

如果你的私钥不在默认位置,连接时需要用 -i 参数手动指定私钥路径。

Q2:私钥文件丢失了怎么办?

如果私钥文件丢失或损坏,没有办法恢复,你只能重新生成一对新的密钥。如果你已经禁用了密码登录,就需要通过 VPS 服务商的控制面板或 VNC 连接来重新配置。所以我建议把私钥文件备份一份,放在安全的地方。

Q3:可以在多台电脑上使用同一个 SSH 密钥吗?

可以。你可以把私钥文件复制到其他电脑的 ~/.ssh/ 目录下,就能在那台电脑上使用 SSH 密钥登录了。

不过从安全角度考虑,我更推荐为每台电脑生成独立的密钥对,然后把各自的公钥都添加到服务器的 authorized_keys 文件中(一行一个公钥)。

Q4:忘记了私钥的密码(passphrase)怎么办?

如果你给私钥设置了密码但忘记了,很遗憾也没有办法恢复。你需要重新生成新的密钥对,然后更新服务器上的公钥。

Q5:一台服务器可以添加多个公钥吗?

当然可以。authorized_keys 文件支持添加多个公钥,一行一个。这在团队协作时特别有用,每个成员用自己的私钥登录,互不干扰。

Q6:PuTTY 和 OpenSSH 的密钥可以互相转换吗?

可以,他们只是格式不通。前面我们就讲过,PuTTY Key Generator 可以导入 OpenSSH 格式的私钥(id_rsa),然后保存成 .ppk 格式供 PuTTY 使用。

发表评论