如何使用 PuTTY 创建 SSH 密钥以连接到 VPS

简介: 如何使用 PuTTY 创建 SSH 密钥以连接到 VPS

公钥和私钥 SSH 密钥的好处

如果您的无头或远程 VPS 可以通过互联网访问,您应该尽可能使用公钥身份验证而不是密码。这是因为与仅使用密码相比,SSH 密钥提供了一种更安全的登录方式。虽然密码最终可以通过暴力破解攻击破解,但 SSH 密钥几乎不可能仅通过暴力破解来解密。使用公钥身份验证,每台计算机都有 (i) 公钥 和 (ii) 私钥 “密钥”(两个数学上相关的算法,几乎不可能被破解)。

如今,OpenSSH 是类 Unix 系统(如 Linux 和 OS X)上的默认 SSH 实现。基于密钥的身份验证是 OpenSSH 可用的几种身份验证模式中最安全的,其他身份验证方法仅在非常特定的情况下使用。SSH 可以使用 “RSA”(Rivest-Shamir-Adleman)或 “DSA”(“数字签名算法”)密钥。当 SSH 被发明时,这两种算法都被认为是最先进的算法,但近年来 DSA 已被视为不太安全。RSA 是新密钥的唯一推荐选择,因此本教程将 “RSA 密钥” 和 “SSH 密钥” 互换使用。

当您登录到您的 DigitalOcean VPS 时,SSH 服务器使用公钥以一种只能由您的私钥 “解锁” 消息的方式来 “锁定” 消息。这意味着即使是最有资源的攻击者也无法窥视或干扰您的会话。作为额外的安全措施,一些用户和大多数 SSH 程序以受密码保护的格式存储私钥,以提供一段时间,在此期间您可以禁用已被入侵的公钥,如果您的计算机被盗或被入侵。因此,对于大多数人来说,公钥身份验证是比密码更好的解决方案。事实上,通过不在私钥上使用密码短语,您将能够自动化配置管理的部分内容,例如增量离线备份、通过 DigitalOcean API 管理您的 DigitalOcean 资产等。

基于密钥的 SSH 登录

您可以在尽可能多的云服务器上保存相同的公钥,而您的私钥保存在您登录到服务器的客户端上。然后,您可以禁用正常的用户名/密码登录过程,这意味着只有拥有有效的私钥/公钥对的人才能登录;这样可以使您的系统更安全,因为它将不受暴力破解攻击的影响。

自动创建新的 Droplets

SSH 密钥可以发挥的另一个有用作用是在创建 DigitalOcean droplets 时。正如您所知,当您启动 droplet 时,您必须等待一封带有密码的电子邮件。虽然这封电子邮件非常方便,但有一种更安全(和更快)的方法可以访问您的新云服务器,而无需电子邮件。这可以通过在 DigitalOcean 控制面板 中保存您的公钥来实现。要实现这一点:

先决条件

本教程假设您熟悉 DigitalOcean 的 How to Log Into Your Droplet with PuTTY (for windows users) 指南。

PuTTY 密钥生成器(又名 PuTTYgen)

虽然 PuTTY 是 SSH(以及 Telnet 和 Rlogin)的客户端程序,但它不是基于 OpenSSH 的端口或其他形式。因此,PuTTY 不支持原生读取 OpenSSH 的 SSH-2 私钥文件。然而,PuTTY 有一个名为 PuTTYgen 的伴侣(一个 RSA 和 DSA 密钥生成实用程序),它可以将 OpenSSH 私钥文件转换为 PuTTY 的格式;从而允许您使用 SSH 密钥从 Windows 计算机连接到您的云服务器,同时提供 SSH 密钥提供的额外安全性。

PuTTYgen 是一个(免费)开源实用程序,可以从 维护者的网站 下载。PuTTYgen 是您将用于生成用于 PuTTY 的 SSH 密钥的工具。首先,您只需要下载可执行文件(.exe)并将其保存在您将用于连接到 VPS 的计算机上,例如桌面。您 不需要 “安装” PuTTYgen,因为它是一个独立的应用程序。

生成用于 PuTTY 的 OpenSSH 兼容密钥

要使用 PuTTYgen 生成一组 RSA 密钥:

  1. 双击其 .exe 文件启动 PuTTYgen 实用程序;
  2. 对于 要生成的密钥类型,选择 RSA
  3. 生成的密钥中的位数字段中,指定 20484096(增加位数会使通过暴力破解方法破解密钥变得更加困难);
  4. 单击 Generate 按钮;
  5. 密钥 部分的空白区域中移动鼠标指针(以生成一些随机性),直到进度条填满;
  6. 现在已生成了一对私钥/公钥;
  7. 密钥注释字段中,输入 任何 您喜欢的注释,以帮助您稍后识别此密钥对(例如您的电子邮件地址;家庭;办公室等)-- 在您最终创建多个密钥对的情况下,密钥注释特别有用;
  8. 可选:在 密钥密码短语字段中输入密码短语,并在 确认密码短语字段中重新输入相同的密码短语(如果您希望将密钥用于自动化流程,则不应创建密码短语);
  9. 单击 保存公钥 按钮,并选择任何您喜欢的文件名(一些用户在计算机上创建一个名为 my_keys 的文件夹);
  10. 单击 保存私钥 按钮,并选择任何您喜欢的文件名(您可以将其保存在与公钥相同的位置,但它应该是只有您可以访问且您不会丢失的位置!如果您丢失了密钥并且已禁用了用户名/密码登录,您将无法再登录!);
  11. 在标有 用于粘贴到 OpenSSH authorized_keys 文件的公钥 的文本字段中右键单击,并选择 全选
  12. 再次在相同的文本字段中右键单击,并选择 复制

注意: PuTTY 和 OpenSSH 使用不同的格式来存储公共 SSH 密钥。如果您复制的 SSH 密钥 以 “---- BEGIN SSH2 PUBLIC KEY …” 开头,则它的格式是错误的。请务必仔细遵循说明。您的密钥应该以 “ssh-rsa AAAA …” 开头。

在服务器上保存公钥

现在,您需要将复制的公钥粘贴到服务器上的文件 ~/.ssh/authorized_keys 中。

  1. 登录到您的目标服务器;参见 How to Log Into Your Droplet with PuTTY (for windows users)
  2. 如果您的 SSH 文件夹尚不存在,请手动创建它:
mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
  1. 将 SSH 公钥粘贴到您的 ~/.ssh/authorized_keys 文件(参见 Installing and Using the Vim Text Editor on an Cloud Server):
sudo vim ~/.ssh/authorized_keys
  1. 按键盘上的 i 键,然后右键单击鼠标以粘贴。
  2. 要保存,请按键盘上的以下键(按此顺序):Esc:wqEnter

创建 PuTTY 配置文件以保存服务器设置

在 PuTTY 中,您可以创建(并保存)用于连接到各种 SSH 服务器的配置文件,这样您就不必记住并不断重新输入冗余信息。

  1. 双击其可执行文件启动 PuTTY;
  2. PuTTY 的初始窗口是 会话 类别(在窗口的左侧导航到 PuTTY 的各种类别);
  3. 主机名字段中,输入您的 VPS 的 IP 地址或其完全限定域名(FQDN);参见 How to Set Up a Host Name with DigitalOcean
  4. 端口字段中输入端口号(为了增加安全性,考虑将服务器的 SSH 端口更改为非标准端口。 参见 Initial Server Setup with Ubuntu 12.04
  5. 协议下选择 SSH
  6. 在窗口的左侧选择 连接 下的 数据 子类别;
  7. 自动登录用户名字段中指定您打算在登录到 SSH 服务器时使用的用户名,并保存您正在保存的配置文件;
  8. 展开 连接 下的 SSH 子类别;
  9. 高亮显示 Auth 子类别,然后单击 PuTTY 窗口右侧的 浏览 按钮;
  10. 浏览您的文件系统并选择先前创建的私钥;
  11. 返回到 会话 类别,并在 保存的会话字段中输入此配置文件的名称,例如 user@123.456.78.9 或 user@host.yourdomain.tld;
  12. 单击 保存 按钮以保存 加载、保存或删除存储的会话 区域中的配置文件。

现在,您可以继续登录到 user@1.2.3.4,您将 不会 被提示输入密码。但是,如果您在公钥上设置了密码短语,那么您将被要求在那时(以及将来每次登录时)输入密码短语。

禁用用户名/密码登录

一旦您验证了基于密钥的登录是否正常工作,您可以选择禁用用户名/密码登录以获得更好的安全性。要做到这一点,您需要编辑您的 SSH 服务器配置文件。在 Debian/Ubuntu 系统上,此文件位于 /etc/ssh/sshd_config

sudo vim /etc/ssh/sshd_config

按键盘上的 i 键,编辑下面引用的行:

[...]
PasswordAuthentication no
[...]
UsePAM no
[...]

要保存,请按键盘上的以下键(按此顺序):Esc:wqEnter。现在,重新加载 SSH 服务器的配置:

sudo reload ssh


目录
相关文章
|
2月前
|
Ubuntu Shell 网络安全
安装了ubuntu虚拟机后发现shell无法连接 ubuntu开启ssh连接
【8月更文挑战第23天】安装了ubuntu虚拟机后发现shell无法连接
210 6
|
15天前
|
网络安全 数据安全/隐私保护 C++
VS Code 的SSH连接不成功问题分析与解决
VS Code 的SSH连接不成功问题分析与解决
|
4月前
|
安全 网络安全 算法框架/工具
SSH高版本连接问题排查
【6月更文挑战第21天】SSH高版本连接问题排查
250 0
|
2月前
|
安全 Linux 网络安全
Docker部署ssh连接工具webssh2
【8月更文挑战第2天】Docker部署ssh连接工具webssh2
215 6
Docker部署ssh连接工具webssh2
|
2月前
|
网络安全
mac下通过ssh脚本实现免账号密码连接运服务器
mac下通过ssh脚本实现免账号密码连接运服务器
45 3
|
2月前
|
监控 网络安全 数据安全/隐私保护
Mac服务器ssh连接工具
Mac服务器ssh连接工具
89 2
|
2月前
|
网络安全 数据安全/隐私保护
VSC通过 SSH 连接到远程服务器时,每次都需要输入密码
VSC通过 SSH 连接到远程服务器时,每次都需要输入密码
510 0
|
2月前
|
安全 Linux Shell
如何在 Linux 服务器上配置基于 SSH 密钥的身份验证
如何在 Linux 服务器上配置基于 SSH 密钥的身份验证
73 0
|
2月前
|
安全 Unix Shell
如何在 FreeBSD 服务器上配置基于 SSH 密钥的身份验证
如何在 FreeBSD 服务器上配置基于 SSH 密钥的身份验证
87 0
|
3月前
|
网络协议 安全 Linux
在IntelliJ IDEA中使用固定公网地址远程SSH连接服务器环境进行开发
在IntelliJ IDEA中使用固定公网地址远程SSH连接服务器环境进行开发
82 2