ssh-keygen生成密钥对详解

概述

在客户端生成密钥对,并将公钥添加到git服务器的指定项目中。然后客户端以SSH方式访问项目时,git服务器和git客户端会以公、私钥验证加密的方式来信任彼此,并允许客户端执行一系列操作。

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


1. 基本部署


密钥对的保存路径:

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

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

即,密钥对的路径一般在当前用户下的.ssh文件夹下。

如果没有上述路径,有可能是当前用户还从未生成过密钥对,或目录与上述有差异。此时可以执行ssh-keygen -t rsa 命令尝试创建密钥对:

然后会提示输入密钥对的路径,并给出密钥对的默认路径。得到密钥对默认路径后, Ctrl + c 退出创建。


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

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

所以在创建密钥对时,要通过密钥对的名称来区分。但是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








2. 创建密钥对

生成密钥对前,一定要明确执行相关操作的用户

ssh-keygen -t rsa -C "这是ECS自动部署密钥对" -f /c/Users/YANGWW/.ssh/id_test
## -C 是注释,注释会显示在保存公钥的文件中
## -f 是密钥对的路径名称;密钥对名称不能和现有的重复;
## 然后一直回车就行(两次回车分别是提示您设置密钥对的密码,一般无须设置密码,所以直接回车)
## 生成的文件通常是 /root/.ssh/id_rsa,如果非root用户请查看提示上的路径


3. 密钥对设置密码

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

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


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

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



4. 密钥对默认位置


MAC : /Users/username/.ssh/

Windows : /home/username/.ssh/

举报

© 著作权归作者所有


1