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

2024-05-16 06:04

本文主要是介绍如何使用 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 控制面板 中保存您的公钥来实现。要实现这一点:

  • 首先完成本教程中标题为 Generating OpenSSH-compatible Keys for Use with PuTTY 的部分。
  • 然后,跳到 How to Use SSH Keys with DigitalOcean Droplets 的 Step Three 部分。

先决条件

本教程假设您熟悉 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
    
  3. 将 SSH 公钥粘贴到您的 ~/.ssh/authorized_keys 文件(参见 Installing and Using the Vim Text Editor on an Cloud Server):
    sudo vim ~/.ssh/authorized_keys
    
  4. 按键盘上的 i 键,然后右键单击鼠标以粘贴。
  5. 要保存,请按键盘上的以下键(按此顺序):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

这篇关于如何使用 PuTTY 创建 SSH 密钥以连接到 VPS的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994076

相关文章

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,