ssh中公钥和私钥怎么生成

embedded/2025/2/8 10:24:06/

ssh-keygen 是一个用于生成 SSH 密钥对的工具,通常用于 SSH(Secure Shell)协议的密钥认证。SSH 密钥对包括一个公钥和一个私钥,用于增强 SSH 登录的安全性,避免使用明文密码登录服务器。以下是关于 ssh-keygen 的详细说明:

1. SSH 密钥对的作用

  • 公钥(Public Key):可以公开分发给服务器或其他客户端。服务器会将公钥存储在用户的授权文件(如 ~/.ssh/authorized_keys)中。

  • 私钥(Private Key):必须严格保密,只有用户自己保存。私钥用于解密服务器发送的加密信息,从而验证用户的身份。

  • 工作原理

    • 当客户端尝试通过 SSH 登录服务器时,服务器会向客户端发送一个加密的挑战信息。

    • 客户端使用私钥解密该挑战信息,并将解密后的结果发送回服务器。

    • 服务器验证解密结果是否正确,从而确认客户端的身份。

2. 使用 ssh-keygen 生成密钥对

基本命令

bash复制

ssh-keygen
  • 默认行为

    • 默认情况下,ssh-keygen 会生成一个 2048 位的 RSA 密钥对。

    • 公钥保存在 ~/.ssh/id_rsa.pub 文件中。

    • 私钥保存在 ~/.ssh/id_rsa 文件中。

常用选项
  • 指定密钥类型

    • -t:指定密钥类型,如 rsadsaecdsaed25519 等。

      • RSA:最常用的密钥类型,推荐使用 2048 位或更高。

      • Ed25519:一种较新的密钥类型,安全性更高,推荐使用。

      • 示例:

        bash复制

        ssh-keygen -t rsa -b 2048
        ssh-keygen -t ed25519
  • 指定文件名

    • -f:指定密钥文件的保存路径。

      • 示例:

        bash复制

        ssh-keygen -t rsa -b 2048 -f ~/.ssh/my_custom_key

        这会生成 ~/.ssh/my_custom_key(私钥)和 ~/.ssh/my_custom_key.pub(公钥)。

  • 设置密码(可选)

    • 在生成密钥对时,系统会提示用户输入一个密码(passphrase)。如果设置了密码,每次使用私钥时都需要输入该密码,从而增加安全性。

    • 如果不输入密码,直接按回车键,则私钥无需密码即可使用。

3. 将公钥添加到服务器

生成密钥对后,需要将公钥添加到目标服务器的 ~/.ssh/authorized_keys 文件中,以便使用密钥登录。

方法 1:手动复制
  1. 在本地机器上查看公钥内容:

    bash复制

    cat ~/.ssh/id_rsa.pub
  2. 将公钥内容复制到服务器的 ~/.ssh/authorized_keys 文件中:

    bash复制

    ssh user@server
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    echo "your_public_key_content" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
方法 2:使用 ssh-copy-id

ssh-copy-id 是一个方便的工具,可以自动将公钥复制到服务器的 ~/.ssh/authorized_keys 文件中。

bash复制

ssh-copy-id user@server
  • 运行该命令时,系统会提示输入服务器的密码。输入密码后,公钥将自动添加到服务器。

4. 使用密钥登录服务器

完成上述步骤后,可以使用密钥登录服务器:

bash复制

ssh -i ~/.ssh/my_custom_key user@server
  • -i:指定私钥文件路径。

  • 如果私钥文件是默认路径(如 ~/.ssh/id_rsa),则无需指定 -i 参数。

5. 注意事项

  • 保护私钥:私钥文件(如 ~/.ssh/id_rsa)必须严格保密,建议设置文件权限为 600

    bash复制

    chmod 600 ~/.ssh/id_rsa
  • 备份密钥:建议将私钥文件备份到安全的地方,以防丢失。

  • 密钥类型选择:推荐使用 ed25519 或高位数的 RSA 密钥,以确保安全性。

通过使用 ssh-keygen 生成密钥对并配置密钥登录,可以显著提高 SSH 登录的安全性,避免使用明文密码带来的风险。


http://www.ppmy.cn/embedded/160515.html

相关文章

【Spring Boot实战教程】第一章——多环境配置与第三方技术整合

目录 ? 前言 一、SpringBoot简介 1. 入门案例 1.1 入门案例开发步骤 1.2 基于SpringBoot官网创建项目 1.3 SpringBoot项目快速启动 2. SpringBoot概述 问题导入 2.1 起步依赖 2.2 默认配置 二、基础配置 1. 配置文件格式 问题导入 1.1 修改服务器端口 1.2 自动…

在 Navicat 17 中扩展 PostgreSQL 数据类型 | 复合类型

复合类型 欢迎来到,使用 Navicat Premium 17 在 PostgreSQL 创建自定义数据类型系列的第二部分。 在 第 1 部分 ,我们学习了如何为免费的 DVD Rental database 创建自定义域。域是一个用户定义的包含 NOT NULL 和 CHECK 等约束的数据类型。在今天的博客…

docker直接运行arm下的docker

运行环境是树莓派A 处理器是 arm32v6 安装了docker,运行lamp 编译安装php的时候发现要按天来算,于是用电脑vm下的Ubuntu系统运行arm的docker 然后打包到a直接导入运行就可以了 第一种方法 sudo apt install qemu-user-static 导入直接运行就可以了…

Linux中DataX使用第三期

简介 紧接着上期关于DataX源码的初步了解,本期来自己定义一个简单的数据读取和数据写入插件。目的为了方便了解DataX工作的流程。 环境 Windows10 (linux中命令相似,为了方面调试就用windows的)JDK(1.8以上,推荐1.8)Python(2或3都可以)Apach…

UnityShader学习笔记——基础纹理

——内容源自唐老狮的shader课程 目录 1.概述 2.纹理颜色采样 3.纹理结合光照 4.凹凸纹理 4.1.概念 4.2.高度纹理贴图 4.3.法线纹理贴图(一般用这个) 4.3.1.概述 4.3.2.读取分量的规则 4.3.3.法线纹理贴图的两种存储方式 1.基于模型空间的法线纹理 2.基于切线空间的法…

feign Api接口中注解问题:not annotated with HTTP method type (ex. GET, POST)

Bug Description 在调用Feign api时,出现如下异常: java.lang.IllegalStateException: Method PayFeignSentinelApi#getPayByOrderNo(String) not annotated with HTTPReproduciton Steps 1.启动nacos-pay-provider服务,并启动nacos-pay-c…

带罚函数的Bspline拟合

1、内容简介 略 matlab simulink 115-带罚函数的Bspline拟合可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略Flexible Smoothing with B-splines and Penaltie.pdf

团餐订餐系统源码企业订餐小程序写字楼办公区团餐软件开发

市场前景 近年来,随着社会经济的发展和人们生活节奏的加快,团餐市场规模持续扩大,现已稳稳占据了整个餐饮市场三分之一左右的份额,成为了推动餐饮行业发展的重要力量。截至2023年,中国团餐行业市场规模达22350亿元&am…