在 Windows 上使用 SSH 密钥访问 Linux 服务器

devtools/2025/1/8 7:16:04/

本章目录:

    • 前言
    • 1. 准备工作
    • 2. 生成 SSH 密钥对
      • 步骤 1:打开命令行
      • 步骤 2:运行 `ssh-keygen` 命令
      • 步骤 3:选择密钥保存位置
      • 步骤 4:设置密钥密码(可选)
      • 步骤 5:生成密钥对
    • 3. 查看生成的密钥文件
    • 4. 将公钥添加到 Linux 服务器
      • 步骤 1:复制公钥
      • 步骤 2:在 Linux 服务器上配置公钥
      • 步骤 3:验证配置
    • 5. 完成免密登录
    • 6. 常见问题
      • 1. Permission denied (publickey) 错误
      • 2. 如何更换密钥
    • 总结


前言

在日常的开发或运维工作中,使用 SSH 密钥进行身份验证,避免了每次都输入密码的麻烦。本文将详细介绍如何在 Windows 系统上生成 SSH 密钥对,并将公钥添加到 Linux 服务器上,以便通过 SSH 免密登录。


1. 准备工作

如果你需要通过 SSH 访问 Linux 服务器,那么首先需要生成一对 SSH 密钥(公钥和私钥)。通常推荐使用 RSA 算法生成密钥对。生成的密钥将存储在 Windows 本地,之后将公钥上传到远端的 Linux 服务器,以实现无密码登录。

2. 生成 SSH 密钥对

步骤 1:打开命令行

首先,打开 Windows 的命令行(CMD)。可以按下 Win + R 键,然后输入 cmd,按下回车进入命令行界面。

sshkeygen__21">步骤 2:运行 ssh-keygen 命令

在命令行中输入以下命令:

ssh-keygen

你也可以指定生成 RSA 密钥对:

ssh-keygen -t rsa

步骤 3:选择密钥保存位置

执行命令后,会提示你输入保存密钥的文件位置。默认情况下,密钥会保存在 C:\Users\XXX\.ssh\id_rsa 文件中(XXX 是你的用户名)。如果你希望保存到其他位置,可以自行指定文件路径。如果直接按回车,密钥将保存在默认位置。

Enter file in which to save the key (C:\Users\XXX\.ssh\id_rsa):

步骤 4:设置密钥密码(可选)

接下来,命令行会要求你输入密钥的密码。你可以选择设置密码,也可以直接按回车跳过,生成一个无密码的密钥。

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

步骤 5:生成密钥对

完成上述步骤后,密钥对将生成在指定的目录下。命令行输出将显示类似以下内容:

Your identification has been saved in C:\Users\XXX\.ssh\id_rsa.
Your public key has been saved in C:\Users\XXX\.ssh\id_rsa.pub.
The key fingerprint is:
SHA256:k/fZW0MI2odocmufHxptziPKxrNu4guuq0fTX/miWEs
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|           .     |
|         .+ o .  |
|    .  .S=oo o . |
|   o .  +=..oo.  |
|  . ...Eoo..o+...|
|   .. =o+*.oB..o.|
| .oooo.=B==+o+o  |
+----[SHA256]-----+

至此,你已经成功生成了一个 RSA 密钥对。

3. 查看生成的密钥文件

生成的密钥对将保存在以下路径:

C:\Users\XXX\.ssh\id_rsa  ==> 私钥文件
C:\Users\XXX\.ssh\id_rsa.pub  ==> 公钥文件
  • 私钥id_rsa)保留在本地,确保安全,绝对不能泄露。
  • 公钥id_rsa.pub)需要上传到你希望访问的 Linux 服务器中。

4. 将公钥添加到 Linux 服务器

步骤 1:复制公钥

打开 id_rsa.pub 文件,你可以看到类似以下内容:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArM..(长一串字符)... user@host

复制该文件中的所有内容(从 ssh-rsa 开始,到最后的 user@host 结束)。

步骤 2:在 Linux 服务器上配置公钥

  1. 使用 SSH 登录到你的 Linux 服务器(如果已经配置了密码登录)。

  2. 服务器上,打开或创建 ~/.ssh/authorized_keys 文件:

    nano ~/.ssh/authorized_keys
    
  3. 将你复制的公钥粘贴到 authorized_keys 文件中。

  4. 保存并关闭文件。确保文件的权限设置正确,执行以下命令来设置权限:

    chmod 600 ~/.ssh/authorized_keys
    
  5. 确保 .ssh 目录本身的权限是 700:

    chmod 700 ~/.ssh
    

步骤 3:验证配置

现在,你已经将公钥添加到 Linux 服务器。尝试从 Windows 本地进行 SSH 登录,使用以下命令:

ssh username@linux_server_ip

如果配置成功,你将无需输入密码,即可直接登录到远程 Linux 服务器

5. 完成免密登录

当你的公钥已经成功添加到 Linux 服务器并且权限配置正确时,你就可以通过 SSH 免密登录了。这样你无需每次都输入密码,操作会更加高效便捷。

6. 常见问题

1. Permission denied (publickey) 错误

如果你遇到 Permission denied (publickey) 错误,通常是因为以下原因之一:

  • 公钥未正确添加到服务器~/.ssh/authorized_keys 文件中。

  • ~/.ssh 目录或 authorized_keys 文件的权限设置不正确,确保它们的权限为 700 和 600。

  • 服务器的 SSH 配置文件 /etc/ssh/sshd_config 中没有允许公钥认证。请检查是否有如下设置:

    PubkeyAuthentication yes
    

    修改后,重启 SSH 服务:

    sudo systemctl restart sshd
    

2. 如何更换密钥

如果你需要更换生成的密钥(例如,私钥泄露了),只需要重新生成一对新的密钥,并按照上述步骤替换 authorized_keys 文件中的公钥即可。


总结

通过以上步骤,你已经在 Windows 上成功生成了 SSH 密钥对,并将公钥添加到 Linux 服务器上,实现了免密登录。这不仅提升了安全性(避免明文密码泄露),也提高了工作效率。希望本文能帮助你顺利配置 SSH 无密码登录。



http://www.ppmy.cn/devtools/147955.html

相关文章

LeetCode:106.从中序与后序遍历序列构造二叉树

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:106.从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder ,其中 inorder …

解锁 CSS Grid 的奇妙世界,探寻前端布局的无限可能

文章目录 一、引言二、CSS Grid 基础入门(一)基本概念解读(二)关键属性剖析 三、CSS Grid 实用技巧大放送(一)打造响应式布局(二)实现复杂的网格结构(三)灵活…

【论文阅读】SCGC : Self-supervised contrastive graph clustering

论文地址:SCGC : Self-supervised contrastive graph clustering - ScienceDirect 代码地址: https://github.com/gayanku/SCGC 摘要 图聚类旨在发现网络中的群体或社区。越来越多的模型使用自编码器(autoencoders)结合图神经网…

rear(Relax-and-Recover)全量备份RHEL8.6操作系统

目录 REAR介绍一、事前准备二、备份操作配置本地yum源、安装rear软件修改rear工具配置文件:/etc/rear/local.conf查看rear配置信息命令开始备份检查文件生成三、恢复主机REAR介绍 rear (Relax and Recover)是一个开源项目,用于备份和还原Linux系统。rear提供了一个简单的框架…

node.js之---事件循环机制

事件循环机制 Node.js 事件循环机制(Event Loop)是其核心特性之一,它使得 Node.js 能够高效地处理大量并发的 I/O 操作。Node.js 基于 非阻塞 I/O,使用事件驱动的模型来实现异步编程。事件循环是 Node.js 实现异步编程的基础&…

vue2框架配置路由设计打印单

业务效果: 查询出列表后&#xff0c;点击申请单按钮&#xff0c;弹出申请表格&#xff0c;可进行打印 后端实现 控制器、服务层等省略&#xff0c;关联查出数据提供接口给前端即可 <!--获取详细信息(用于申请单打印)--><select id"selectXxxxDetail" par…

Vue项目中生成node_modules文件夹的两种常用方法及npm优势

在Vue项目中生成node_modules文件夹的过程非常简单,主要步骤如下: 1、使用 npm 安装依赖包; 2、使用 yarn 安装依赖包。其中,推荐使用npm安装依赖包,原因如下: 兼容性更广:npm是Node.js的默认包管理工具,具有更高的兼容性。社区支持:npm拥有更大的用户基础和社区支持,…

从0开始的opencv之旅(1)cv::Mat的使用

目录 Mat 存储方法 创建一个指定像素方式的图像。 尽管我们完全可以把cv::Mat当作一个黑盒&#xff0c;但是笔者的建议是仍然要深入理解和学习cv::Mat自身的构造逻辑和存储原理&#xff0c;这样在查找问题&#xff0c;或者是遇到一些奇奇怪怪的图像显示问题的时候能够快速的想…