ssh-keygen生成密钥对详解

概述

Windows不支持生成密钥对的命令,因此要安装 GIT ;GIT能让我们在windows上执行常用的Linux命令;安装GIT后,右键鼠标,点击 “Git Bash here,即可打开可以执行Linux命令的控制台。

生成密钥对

1.0> 密钥对一般在当前用户下的.ssh文件夹下:

Linux中密钥对一般保存在 /home/yangww/.ssh/ 目录中 (yangww是当前用户);

Windows中密钥对一般保存在 C:/Users/YANGWW/.ssh 目录下中;

2.0> 通过生成密钥命令来查看默认的密钥位置

3.0> 创建密钥对

创建SSH密钥时不要使用已过时的RSA算法,OpenSSH_9开始已默认关闭了RSA算法;由于新版Mac OS内置的OpenSSH版本是9.0p1,因此默认不支持RSA算法;系统中已有的RSA算法密钥将无法再使用,因为OpenSSH_9开始不再提供RSA算法的相关操作;

Ed25519算法的安全性介于 RSA 2048RSA 4096 之间,但性能是RSA算法的数十倍以上;OpenSSH 版本大于 6.5(2014 年的版本)都支持 Ed25519 算法;

## 查看OpenSSH版本
ssh -V

创建Ed25519算法密钥对:

ssh-keygen -t ed25519

参考资料:https://juejin.cn/post/7158284813315604516

多密钥管理

创建一个密钥对后,将公钥配置到需要建立信任的机器或项目即可。

可以只创建一个密钥对,然后将公钥配置到多个机器;但这样有个问题,如果想取消对某个机器的信任关系,将无法做到。如果删除密钥对,会删除与所有机器的信任关系。

所以在创建密钥对时,要通过密钥对的名称来区分。但是ssh命令默认只读取名称为 id_rsa 的这个私钥,所以如果 是其它 的名字需要添加配置文件 ~/.ssh/config,使用它来管理所有密钥对:

## 创建config文件
touch /c/Users/YANGWW/.ssh/config

config文件配置项详解:

## 别名
Host server
## 服务器地址
HostName server.com
## 用户名,比如:username@github.com:SnapKit/Masonry.git,就是其中的username,一般是git
User username
## 密钥对路径
IdentifyFile  ~/.ssh/id_rsa_test

示例:

## 例1:码云
Host gitee
HostName gitee.com
User git
PreferredAuthentications publickey
IdentityFile  ~/.ssh/id_rsa_360suan
IdentitiesOnly yes

## 例2:conding.net
Host git.coding.net
HostName git.coding.net
User git
PreferredAuthentications publickey
IdentityFile  ~/.ssh/id_rsa_sidoc
IdentitiesOnly yes

## 例3:conding.net
Host test
HostName git.coding.net
User git
PreferredAuthentications publickey
IdentityFile  ~/.ssh/id_rsa_test
IdentitiesOnly yes

验证密钥配置

测试密钥对配置是否成功

## 使用别名test测试
ssh -T git@test

## 使用别名gitee.com测试
ssh -T git@gitee.com

## 使用别名coding.net测试
ssh -T git@git.coding.net
ssh -T git@git.dev.tencent.com

## 使用别名github测试
ssh -T git@github

注:克隆项目时使用别名,而不能使用HostName;且别名不能重复。

例如:git服务端给出的项目地址为:git@git.coding.net:yangww/test.git

克隆时必须使用:git clone git@test:yangww/test.git

查看验证和寻找密钥的路径:

## 测试密钥,并列表寻找密钥的路径
ssh -vT git@github

密钥对设置密码

通常为了使用方便,在生成密钥对时都不设置密码;但这样有一个风险,如果别人拿到你的密钥对,就可以代替你,与部署公钥的机器建立信任关系。

可是设置了密码,每次验证密钥时,都要输入密码才能使用密钥对。比如:使用git进行pull、push操作时,都要输入密钥对的密码,非常麻烦。

可以使用如下命令修改密钥对密码:

## 执行命令后,会提示输入密钥对文件路径
ssh-keygen -p
举报

© 著作权归作者所有


1