SSH 秘钥Key的简介以及生成和使用

本文详细介绍了SSH公钥登录的工作原理及其配置步骤。通过对比口令登录方式,突出了公钥登录的安全性和便捷性特点。此外,还提供了具体的实践案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介

一、SSH key简介
要了解SSH key简介,首先得熟悉SSH,关于ssh可以参考“SSH的初步使用详解”。SSH 密钥对可以让您方便的登录到 SSH 服务器,而无需输入密码。SSH 密钥对总是成双出现的,一把公钥,一把私钥。公钥可以自由的放在您所需要连接的 SSH 服务器上,而私钥必须的保管好。

1、什么是公钥登录

公钥登录,很多时候也说public key认证,公钥登录的原理:首先用户将自己的公钥存储在需要登录的远程机器上面,然后登录的时候,远程主机会向用户发送一段随机字符串,接着用户使用自己的私钥加密字符串,并发给远程主机。最后,远程主机使用存储的公钥进行解密,若解密成功,则说明用户可信,准许登录,不在提示输入密码。
这里写图片描述
备注:

1、服务端会将客户端发的公钥写入到~/.ssh/authorized_keys 文件末尾。

2、公钥和私钥在客户端(登录端)生成

2.什么是口令登录

口令登录,即登录的时候需要输入登录密码。

1.客户端向服务器发出请求

2.服务器将自己的公钥返回给客户端;

3.客户端用服务器的公钥加密登录信息, 再将信息发送给服务器;

4.服务器接收到客户端传送的登录信息, 用自己的私钥解码, 如果结果正确, 则同意登录, 建立起连接。

实现原理如下图:
这里写图片描述
备注:

1、公钥和私钥在服务端生成

二、生成公钥和私钥

ssh-keygen命令,可以生成公钥和私钥,默认生成到用户的家目录下的.ssh文件夹里面

私钥默认会被保存在 ~/.ssh/id_rsa

公钥默认会被保存在 ~/.ssh/id_rsa.pub

命令的格式如下:


ssh-keygen -f fileName -t rsa -C "dequan@example.com"

参数解析:

-f 指定要生成文件的文件名称

-t 设置认定方式,值为rsa,即非对称加密;或dsa,即数字签名和认证

-c 指定公钥中的备注信息
这里写图片描述

三、使用公钥登录的案例

现在,我将从ip为192.168.13.143 的机器,以公钥登录的方式,登录到ip为192.168.13.139的机器。

默认情况下,如果不输入密码,是无法登录的,如下:
这里写图片描述

1、存储公钥

存储公钥,即将192.168.13.143上面生成的公钥,存储在192.168.13.139上面root用户的家目录,如下:
这里写图片描述
将公钥的内容,追加到192.168.13.139上面root用户家目录下的.ssh/authorized_keys文件中,如果该文件不存在,需要手动创建。

2、重新登录

执行如下命令登录

ssh root@192.168.13.139

这里写图片描述
可以看到,这次不需要输入密码,即可完成登录了。
更多内容:http://www.findme.wang/blog/detail/id/376.html

### 如何生成多个SSH密钥 为了生成多个SSH密钥,可以按照以下方法操作。每次创建新的密钥对时,可以通过指定不同的文件名来区分各个密钥。 #### 创建第一个SSH密钥 运行 `ssh-keygen` 命令,并为其提供一个唯一的名称以便于识别: ```bash ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ``` 此命令会提示用户输入保存位置密码短语(passphrase),默认情况下它会被存储在 `~/.ssh/id_rsa` 中[^1]。如果要为该特定密钥分配其他路径,则可以在交互过程中手动定义新目录及其对应的文件名。 #### 添加额外的SSH密钥 对于第二个或者更多数量的密钥来说,重复上述过程即可,只需确保给每一对都赋予独一无二的名字。例如: ```bash ssh-keygen -t ed25519 -f ~/.ssh/work_key -C "work_account@example.org" ``` 这里我们指定了 `-f` 参数直接设定了输出文件的位置与名字(work_key),这样就避免了覆盖已存在的默认私钥(id_rsa)。 --- ### 配置SSH客户端以支持多把钥匙 当拥有了不止一把SSH密钥之后,就需要告诉 SSH 客户端什么时候应该使用哪一把。这通常通过编辑配置文件实现——即位于家目录下的 `.ssh/config` 文件。 下面是一些例子展示如何针对不同主机分别设定相应的公/私钥组合: ```plaintext Host github-personal HostName github.com User git IdentityFile ~/.ssh/personal_key Host bitbucket-work HostName bitbucket.org User git IdentityFile ~/.ssh/work_key ``` 在这个例子中,“github-personal” “bitbucket-work” 是自定义别名;实际连接的时候只需要像平常一样 ssh 到这些别名上就可以了,比如 `git clone git@github-personal:username/repo.git` 就能自动加载正确的密钥[^2]。 另外还可以利用环境变量 `$HOME/.ssh/environment` 来动态调整当前 session 下使用key 对象,不过这种方法相对较少见也更复杂一些。 --- ### 使用 GPG 密钥增强安全性 (可选) 除了传统的 RSA 或 ED25519 类型之外,也可以考虑采用基于 OpenPGP 的加密方式来做进一步加强保护措施。具体做法涉及到了将现有的 SSH 私钥转换成兼容形式再关联至某个已经激活过的 PGP 子键之上。 一旦完成绑定以后,在未来新增加任何其它类型的认证机制之前都应该先检查一下是否有必要继续沿用旧版方案还是切换到更加现代化的技术上去。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值