[Linux] 在 Linux CLI 使用 ssh-keygen 生成 RSA 密钥

SSH密钥生成命令全面解析与企业级应用实战 SSH(Secure Shell)作为现代网络安全通信的核心协议,其密钥生成方式直接影响着系统的安全性与效率。本文从基础概念出发,对比分析RSA、Ed25519、ECDSA等主流算法的特性,结合企业级应用场景,提供从零到一的开发实战指南。通过代码示例、流程图及工具配置,帮助开发者掌握SSH密钥生成的最佳实践。 阅读详情

  RSA 是一种公钥加密算法,在 1977 年由麻省理工学院的%26nbsp;Ron Rivest, Adi Shamir, Leonard Adleman 三人一起提出,因此该算法命名以三人姓氏首字母组合而成。

%26nbsp;

  SSH 是 Secure Shell 缩写,是建立在应用层和传输层基础上的安全协议,为计算机上运行的 Shell 提供安全的传输和使用环境。

%26nbsp;

  传统的 rsh, FTP, POP 和 Telnet 网络协议因为传输时采用明文,很容易受到中间人方式攻击。为了防止远程传输信息出现泄露,SSH 协议支持对传输的数据进行加密,因此它还能防止 DNS 和 IP 欺骗。另外采取 SSH 协议传输的数据可以进行压缩,所以可以加快数据传输速度。最初 SSH 协议由芬兰的%26nbsp;Tatu Yl%26ouml;nen%26nbsp;在 1995 年设计开发,目前属于 SSH Communications Security 拥有,由于版权原因,1999 年 10 月开源软件 OpenSSH 被开发出来,它已成为事实上的 SSH 协议标准实现(SSH Communications Security 提供的 SSH 软件使用不同于 OpenSSH 的私钥格式),也是目前 Linux 标准配置。

%26nbsp;

基本框架

%26nbsp;

  SSH 协议主要分成三个协议:

  1. 传输层协议(The Transport Layer Protocol):传输层协议提供服务器认证,数据机密性,信息完整性等支持。

  2. 用户认证协议(The User Authentication Protocol):用户认证协议为服务器提供客户端的身份鉴别。

  3. 连接协议(The Connection Protocol):连接协议将加密的信息隧道划分成若干逻辑通道,提供给更高层应用协议使用。

%26nbsp;

验证方式

%26nbsp;

  SSH 提供两种安全验证方式:

  1. 基于口令:客户端使用账号和口令登录服务器,所有传输数据都会被加密。但可能存在伪造服务器冒充真正的服务器与客户端进行交互,不能避免中间人攻击。

  2. 基于密钥:使用一对密钥(私钥 + 公钥),将公钥放置到服务器注册。当用户从客户端登录服务器时,服务器会接到使用密钥(即注册在服务器的公钥)进行安全验证请求,服务器首先比对从客户端发送过来的公钥与在己方注册的公钥是否一致,如果一致,服务器会使用该公钥加密数据向客户端发起 "挑战"[1],从而避免中间人攻击。

%26nbsp;

OpenSSH 提供的工具

%26nbsp;

  OpenSSH 提供了以下几个工具:

  1. ssh:实现 SSH 协议,用以建立安全连接,它替代了较早的 rlogin 和 Telnet。

  2. scp, sftp:利用 SSH 协议远程传输文件,它替代了较早的%26nbsp;rcp。

  3. sshd:SSH 服务器守护进程,运行在服务器端。

  4. ssh-keygen:用以生成 RSA 或 DSA 密钥对。

  5. ssh-agent, ssh-add:管理密钥的工具。

  6. ssh-keyscan:扫描网络中的主机,记录找到的公钥。

  

生成密钥对

%26nbsp;

  使用 ssh-keygen 生成一个密钥对(私钥 + 公钥):

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/xavier/.ssh/id_rsa): id_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
ce:89:59:3d:a1:3a:99:b3:01:46:78:0f:d1:cc:d4:fa xavier@Qbee-X
The key's randomart image is:
+--[ RSA 2048]----+
|    .=..         |
|   . .+ .        |
|  . +  .  .      |
|   o o.  o .     |
|    o ..S o      |
|   . . XE. .     |
|      X +        |
|       =         |
|      .          |
+-----------------+

%26nbsp;

  ssh-keygen 默认使用 RSA 算法,长度为 2048 位,生成一个私钥文件 id_rsa 和一个公钥文件 id_rsa.pub,两个文件默认保存在用户的 ~/.ssh 目录下。你可以在命令行交互过程指定密钥文件路径,也可以设置密钥口令,如果设置了密钥口令,在使用密钥进行登录时,需要输入口令。

%26nbsp;

  ssh-keygen 支持 -f 选项指定密钥文件路径,-t 选项指定加密算法,-b 选项指定密钥长度,-N 选项指定密钥口令,-C 选项指定注释。

%26nbsp;

  只要将公钥文件 id_rsa.pub 提交给服务器,读取该文件包含的字符串并追加到服务器端用户的主目录 ~/.ssh/authorized_keys 文件中,持有私钥的客户端就可以使用 SSH 协议登录服务器了。

%26nbsp;

  SSH 1 协议支持 RSA 算法,SSH 2 协议支持 RSA 和 DSA 两种算法。ssh-keygen 使用 -t 选项来指明加密算法,rsa1 表示支持 SSH 1,dsa, ecdsa, rsa 表示支持 SSH 2。

%26nbsp;

  生成支持 SSH 1 的 RSA 密钥:

$ ssh-keygen -t rsa1 -f id-rsa1
Generating public/private rsa1 key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in id-rsa1.
Your public key has been saved in id-rsa1.pub.
The key fingerprint is:
c8:81:8f:dc:cd:ba:86:d2:56:e8:d5:13:3f:57:a5:f9 xavier@Qbee-X
The key's randomart image is:
+--[RSA1 2048]----+
|                 |
|     .          .|
|    . .        + |
|   . = =.     +  |
|    o.=.So   . . |
|    . o.o o .   E|
|   o +.  . o     |
|  . = ..         |
|   o ..          |
+-----------------+

%26nbsp;

  从私钥文件生成公钥文件:

$ ssh-keygen -y -f id-rsa
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDmg/9Hoc98c6AIlEPYK6VqE3ZTlMlfXqn2VgU0NAPXeRmYX+jHYZXA5AxMNTD8KgZIuilK23qzzKBy0hgoO9DDpsBg98Pf4NLkHjTcjpPFX1TBD6RWO/OX/g4uN+gZH1/zoREJa4fit8SSG2V2GoQkqrhfRYCy+a9mQX29ZvOLfYK/aMVjb+yfzLJychdvV3CQkDvkd5R/DHNU6ZQ3pyIEjA/cUQqqmgxQj0f72y8IXv8zesXtjXaaKG17R2oSN1MNDZo/y4m426MYxl4mMQMvM5yR3UvhD93pgNgaR8LY/vspcIeE6cJZsGl21oYtrDZ/GdmF5ulMGwjIDfTJRLvb

%26nbsp;

  修改私钥文件的注释和口令(仅支持 RSA1,如果原 RSA1 文件含有注释或口令,才会提示修改相应的注释或口令。):

$ ssh-keygen -c 
Enter file in which the key is (/home/xavier/.ssh/id_rsa): id-rsa1
Key now has comment 'Hello'
Enter new comment: HelloWorld
The comment in your key file has been changed.

%26nbsp;

  修改私钥文件口令(命令:ssh-keygen -p [-P old_password] [-N new_password] [-f keyfile]):

$ ssh-keygen -p -f id-rsa
Key has comment 'id-rsa'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

%26nbsp;

  如果想要取消口令,只需要在输入密码为空即可。私钥口令只是对私钥文件的访问权限,修改和删除口令并不影响私钥内容。

%26nbsp;

公钥指纹

%26nbsp;

  由于公钥长度一般都是%26nbsp;1024 或 2048 个字节,不方便进行比对,因此通常使用一个较短的字符串来代表它,这个就是公钥指纹。公钥指纹的计算方法一般就是对公钥字符串进行 MD5 或者 SHA-1 等摘要计算得到,一个 1024 字节长度的 RSA 算法公钥,经过指纹计算后得到的公钥指纹只有 128(MD5摘要)字节或者 160(SHA-1)字节。

%26nbsp;

  你可以使用 ssh-keygen 工具来计算公钥指纹:

$ ssh-keygen -l -f id_rsa.pub
2048 ce:89:59:3d:a1:3a:99:b3:01:46:78:0f:d1:cc:d4:fa  xavier@Qbee-X (RSA)

%26nbsp;

  如果客户端是第一次访问服务器,系统会提示以下信息:

$ ssh xavier@192.168.1.5
The authenticity of host '192.168.1.5 (192.168.1.5)' can't be established.
RSA key fingerprint is 1c:bb:f1:e5:40:34:75:d3:37:b7:8f:b3:4a:6f:b6:47.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.5' (RSA) to the list of known hosts.

%26nbsp;

  这是因为客户端第一次连接目标服务器,客户端没有目标服务器的公钥存根,因此系统告诉你目前正在连接的服务器所使用的公钥指纹(公钥指纹代表着公钥,但长度较短便于识别),需要你看看这个指纹是否正确,如果正确就正式建立连接,如果指纹可疑就不要建立连接。

%26nbsp;

  这个公钥指纹是基于服务器的公钥计算而来,服务器的公钥一般保存在 /etc/ssh/ssh_host_rsa_key.pub 文件中。如果你事先知道服务器公钥,那么你自然可以轻松识别指纹并决定是否建立连接,但如果是在互联网中连接陌生服务器,你并知道目标服务器的公钥,这样就无法识别当前指纹是不是恶意的中间人服务器提供的,为了解决这个问题,服务器端管理员需要提前公示自己的公钥,或者是从证书机构申请证书,用户只要使用公示的公钥,或者去颁证机构认证下载证书就可以识别当前连接的服务器是否是虚假的中间人。

%26nbsp;

  一旦你确认指纹合法性并建立连接后,客户端就会将服务器的公钥保存在 $HOME/.ssh/known_hosts 文件中,下次连接时系统自动将对方发过来的公钥与已知公钥进行比对,如果正确就直接建立连接,如果不正确将给出警告提示说公钥不匹配并阻止建立连接。

%26nbsp;

  当由于公钥不匹配而无法建立连接时,可能有几个原因,一是目标服务器更换了公钥;二是目标服务器更换了 IP 地址或者域名,导致你连接到其他主机致使公钥不匹配;三是有恶意攻击者截断了连接,正在使用伪造的主机地址试图欺骗你建立连接。无论是哪个原因,你都应该保持警惕,谨慎建立连接。

  

%26nbsp;

  

注:

[1] "挑战" 是指服务器使用公钥加密数据发送给客户端,客户端使用配对的私钥对数据进行解密,客户端成功解密后将答案发回服务器进行验证,结果一致则挑战成功,表示客户端是合法用户可以进行安全通信。

%26nbsp;

附:

1. RSA 算法

SSH密钥对:从生成到多平台部署的完整指南 本文详细介绍了SSH密钥对的生成、管理和多平台部署方法,包括公钥与私钥的基础概念、密钥生成步骤(使用ssh-keygen工具)、最佳实践以及GitHub、AWS等平台的部署指南。通过SSH密钥对,用户可以提升系统安全性,避免密码泄露风险,并实现自动化操作。 阅读详情

相关推荐

SSH主机密钥管理:避免重复生成与信任链断裂

SSH主机密钥是SSH协议实现服务器身份认证的核心基础设施,其本质是一组非对称密钥(如RSA、ECDSA、ED25519),用于在TCP连接建立后验证远程主机真实性。原理上,OpenSSH服务启动时加载`/etc/ssh/ssh_host_*_key`文件,客户端通过比对本地`known_hosts`中存储的公钥指纹完成校验;若指纹不匹配,即触发‘Host key verification failed’警告。该机制的技术价值在于阻断中间人攻击、支撑自动化运维可信链——CI/CD、Remote-SSH、容器

weixin_33928137的博客 567

ssh-keygen -R

使用shh-keygen 命令(强烈建议使用此方法) 比如我们要将 的公钥信息清除,使用命令(请自己将 替换成自己的IP或域名): ssh-keygen -R xxx

qq_47643719的博客 1万+

Git 2.44 多平台 SSH 密钥管理:Windows/Linux/macOS 3 系统配置与安全策略对比

本文详细介绍了Git 2.44在Windows、Linux和macOS三大平台上的SSH密钥管理策略与安全实践。从密钥生成、SSH-Agent配置到多平台密钥同步与安全策略,提供了一套完整的跨平台解决方案,帮助开发者高效管理SSH密钥并提升安全性。

weixin_34242509的博客 395

ssh连接密钥重置

SSH删除RSA

oldboy1999的博客 4492

VSCode Git 集成 3 种实战:从 HTTPS 克隆到 SSH 密钥配置与推送优化

本文详细介绍了VSCode中Git集成的三种实战方法,包括HTTPS克隆、SSH密钥配置与推送优化。内容涵盖从基础认证流程到高级配置调优,帮助开发者高效管理代码版本控制,特别适合需要频繁上传代码到GitHub的用户。

cucanqi9387的博客 553

ssh免密登录失败解决

一直运行正常的ssh免密登录,今天发现连接失败。 提示如下: 提示里面给了解决问题的建议。 执行命令如下: ssh-keygen -R [ip地址]:端口号 这里注意,ip地址我使用了“[]”扩起来,这个不可省略 执行完毕后,再次测试免密登录,出现连接信息。问题解决。 思考了一下,可能是服务器是十一前,刚刚升级了ssh版本。 不过同样是升级ssh,CentOS6系统也升级了没有任何问题,这台服务器是CentOS7。 ...

bigwood99的博客 2560

ssh-keygen的使用方法以及ssh-keygen参数说明

一、概述 1、就是为了让两个linux机器之间使用ssh不需要用户名和密码。采用了数字签名RSA或者DSA来完成这个操作 2、模型分析 假设 A (192.168.20.59)为客户机器,B(192.168.20.60)为目标机; 要达到的目的: A机器ssh登录B机器无需输入密码; 加密方式选 rsa|dsa均可以,默认dsa   二、具体操作流程   单向登陆的操作

u013227473的博客 6799

Fiori for ABAP 中实现 Excel 批量上传,基于 Spreadsheet Importer 打通 RAP 应用的数据导入链路

本文探讨了SAP项目中Excel上传功能的必要性及实现方案。文章指出,业务上线后常需补建Excel上传功能,用于批量数据导入。传统ABAP后端解析方案存在字段映射、校验回显等痛点,而基于UI5 Spreadsheet Importer组件的方案更为合理——在前端解析Excel后通过标准OData服务提交数据,保持RAP业务对象的校验逻辑。 该组件支持多种场景,中央部署可复用性高,需在manifest.json声明组件引用并通过扩展点添加按钮。方案优势在于:1)遵循Clean Core原则;2)复用标准校验机

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2820

Create an SSH public and private key pair for Linux VMs (转载)

Create an SSH public and private key pair for Linux VMs 12/14/2016 8 min to read Contributors This article shows you how to generate an SSH public and private key pair to use with Li

zjq145的博客 963

GROMACS新手必看:从PDB文件到完整分子动力学模拟的保姆级教程

本文提供GROMACS分子动力学模拟的保姆级教程,从PDB文件处理到完整模拟流程全覆盖。详细讲解结构预处理、系统构建、能量最小化、生产模拟等关键步骤,并分享性能优化和结果分析技巧,帮助新手快速掌握分子动力学模拟的核心操作。

yhn456789的博客 768

MATPOWER下载安装教程

将MATPOWER文件复制在C:\Program Files (x86)\MATLAB\R2016b\bin目录下。原来的窗口中多了很多文件路径,点击【保存】,再点击【关闭】选择所要添加的MATPOWER文件夹,点击【选择文件夹】二、将MATPOWER放在bin目录下。找到菜单栏的【设置路径】点击【添加并包含子文件】一、从官网下载后解压。

weixin_47365903的博客 2万+

Linux 使用 ssh-keygen 生成 RSA 密钥对

首先生成密钥,用命令ssh-keygen –t rsa 运行后可以一直空格,生成密钥,id_rsa和id_rsa.pub文件 ,默认放在/root/.ssh/下,.ssh文件是隐藏的,要显示隐藏文件才看得到 在/home/admin下创建.ssh活页夹,把id_rsa.pub文件copy 到/home/admin/.ssh活页夹下,改变文件名为authorized_keys 把id_rsa 文件copy 到一个目录如/home/id_rsa 用下面的命令测试配好了没: ssh -i

weixin_37753812的博客 2861

PWM调光原理详解:为什么你的LED灯会闪烁?从硬件到软件的避坑指南

本文深入解析PWM调光原理,揭示LED灯闪烁的根本原因,并提供从硬件设计到软件算法的全面解决方案。通过分析人眼视觉暂留机制和PWM参数设置,帮助开发者避免频闪问题,提升照明质量。特别适合电子工程师和智能家居开发者参考。

weixin_29189363的博客 296

redis密钥登录ssh

上一章我们利用redis服务进行了任务反弹shell 这次我来演示如何利用redis密钥登录ssh **首先登录redis ** redis-cli -h 192.168.157.253 这里说下要用key登录对方主机一定要开启key登录 在kali下生成密钥公钥 ssh-keygen-t rsa 生成的公私钥存放在/root/.ssh/id_rsa 我们需要将id_rsa.pub上传到目标服务器 防止乱码 导出key (echo -e “\n\n”; cat id_rsa.pub; echo -e

qq_42307546的博客 1009

Neurocomputing 投稿指南

Generation Information:选择论文所属领域。上传附件(利益声明,手稿,摘要)审稿人偏好:可以选择期待的审稿人。

qq_41174671的博客 2万+

Sigrity System SI Parallel Bus Analysis模式进行DDR3仿真分析操作指导-单个颗粒

Default Strobe Offset:DQS默认偏移时间,自动填充为0.5ns,即DQS默认偏移1/2UI,DQS滞后于DQ 1/2UI,让建立保持时间均分。WLO:写平衡偏移的数值,DataL是0ps,DataU是500ps,是根据WLOSkew自动定义的,可以认为是WLOSkew取整,也可以根据需要手动调整数值。注意AddCmd的UI=T,这里的Data Rate仍然是DQ的速率,并不是地址线的速率,地址线的速率=1/UI=1/2ns=0.5Gbps。

weixin_54787054的博客 367
上一篇: QRadioButton分组且无边框的简单实现
下一篇: 理解javascript原型和作用域系列(8)——简述【执行上下文】
lin91o7c
博客等级 码龄12年 1粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值