如何使用 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

相关文章

Golang interface{}的具体使用

《Golanginterface{}的具体使用》interface{}是Go中可以表示任意类型的空接口,本文主要介绍了Golanginterface{}的具体使用,具有一定的参考价值,感兴趣的可以了... 目录一、什么是 interface{}?定义形China编程式:二、interface{} 有什么特别的?✅

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

宝塔安装的MySQL无法连接的情况及解决方案

《宝塔安装的MySQL无法连接的情况及解决方案》宝塔面板是一款流行的服务器管理工具,其中集成的MySQL数据库有时会出现连接问题,本文详细介绍两种最常见的MySQL连接错误:“1130-Hostisn... 目录一、错误 1130:Host ‘xxx.xxx.xxx.xxx’ is not allowed

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

Spring 缓存在项目中的使用详解

《Spring缓存在项目中的使用详解》Spring缓存机制,Cache接口为缓存的组件规范定义,包扩缓存的各种操作(添加缓存、删除缓存、修改缓存等),本文给大家介绍Spring缓存在项目中的使用... 目录1.Spring 缓存机制介绍2.Spring 缓存用到的概念Ⅰ.两个接口Ⅱ.三个注解(方法层次)Ⅲ.

PyTorch中cdist和sum函数使用示例详解

《PyTorch中cdist和sum函数使用示例详解》torch.cdist是PyTorch中用于计算**两个张量之间的成对距离(pairwisedistance)**的函数,常用于点云处理、图神经网... 目录基本语法输出示例1. 简单的 2D 欧几里得距离2. 批量形式(3D Tensor)3. 使用不

C#使用MQTTnet实现服务端与客户端的通讯的示例

《C#使用MQTTnet实现服务端与客户端的通讯的示例》本文主要介绍了C#使用MQTTnet实现服务端与客户端的通讯的示例,包括协议特性、连接管理、QoS机制和安全策略,具有一定的参考价值,感兴趣的可... 目录一、MQTT 协议简介二、MQTT 协议核心特性三、MQTTNET 库的核心功能四、服务端(BR

使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案

《使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案》在SpringBoot应用中,我们经常使用​​@Cacheable​​注解来缓存数据,以提高应用的性能... 目录@Cacheable注解Redis时,Redis宕机或其他原因连不上,继续调用原方法的解决方案1

java中XML的使用全过程

《java中XML的使用全过程》:本文主要介绍java中XML的使用全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录什么是XML特点XML作用XML的编写语法基本语法特殊字符编写约束XML的书写格式DTD文档schema文档解析XML的方法​​DOM解析XM

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软