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

相关文章

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Springboot3 ResponseEntity 完全使用案例

《Springboot3ResponseEntity完全使用案例》ResponseEntity是SpringBoot中控制HTTP响应的核心工具——它能让你精准定义响应状态码、响应头、响应体,相比... 目录Spring Boot 3 ResponseEntity 完全使用教程前置准备1. 项目基础依赖(M

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

Java利用Spire.Doc for Java实现在模板的基础上创建Word文档

《Java利用Spire.DocforJava实现在模板的基础上创建Word文档》在日常开发中,我们经常需要根据特定数据动态生成Word文档,本文将深入探讨如何利用强大的Java库Spire.Do... 目录1. Spire.Doc for Java 库介绍与安装特点与优势Maven 依赖配置2. 通过替换

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el

C#中Trace.Assert的使用小结

《C#中Trace.Assert的使用小结》Trace.Assert是.NET中的运行时断言检查工具,用于验证代码中的关键条件,下面就来详细的介绍一下Trace.Assert的使用,具有一定的参考价值... 目录1、 什么是 Trace.Assert?1.1 最简单的比喻1.2 基本语法2、⚡ 工作原理3