默认生成的 rsa密钥位置在 ~/.ssh
, 如 C:\Users\mrathena\.ssh
. 各代码托管平台是可以使用同一个SSH密钥的, 这样最方便, 但是为了更安全也可以配置在不同的平台使用不同的密钥
单密钥方式
cmd 执行命令 ssh-keygen -t rsa -b 4096 -C "generic"
, -t type rsa, -b 位数 4096位, 如果不用 -C 指定邮箱, 则会生成一个默认的注释, 该注释无关紧要, 不影响验证
选项全部默认(一路回车), 这样在 ~/.ssh
目录下将生成两个文件, 分别是 id_rsa 和 id_rsa.pub, 前者是私钥, 后者是公钥, 需要将公钥内容上传到各代码托管平台
然后 cmd 执行各平台对应的验证命令, 如 github ssh -T git@github.com
, coding.net ssh -T git@e.coding.net
, 如果能给出一些包含你的信息的反馈提示, 说明测试通过了, 如果需要输入密码或者直接报权限拒绝, 则说明配置有问题
20221021 补充内容
GitHub 安全策略更新
ERROR: You're using an RSA key with SHA-1, which is no longer allowed. Please use a newer client or a different key type.
Please see https://github.blog/2021-09-01-improving-git-protocol-security-github/ for more information.
ssh-keygen --help
ssh-keygen -t ecdsa -b 521 -C "generic"
生成 id_ecdsa
和 ‘id_ecdsa.pub’, 将后者内容上传到 GitHub, 把 GitHub 上配置的已经不用了的旧 Key 删掉(不删好像不行), 即可
私钥文件有用, IDE 工具和代码托管平台交互时用得到
多密钥方式
在 ~/.ssh
目录下添加一个 config 文本文件, 内容大概如下, Host 就是某个代码托管平台的SSH域名, IdentityFile就是指定该平台验证时使用的私钥, 多密钥方式密钥对的生成方式和单密钥相比, 只需要把保存目录修改一下, 和config中的 IdentityFile 对应上就好了. 同时需要把默认路径下的 id_rsa 和 id_rsa.pub 移除. 用同样的验证方式确认配置正确
Host e.coding.net
Preferredauthentications publickey
IdentityFile ~/.ssh/coding.net.key
Host github.com
Preferredauthentications publickey
IdentityFile ~/.ssh/github.key
Tortoise Git 密钥的生成和配置
安装 TortoiseGit
后会捎带安装 PuTTYgen
程序, 搜索 PuTTYgen
打开 PuTTY Key Generator
工具
确认好 Key 的类型和长度后, 点击 Generate 生成全新的密钥对, 这里以 ECDSA(nistp521) 为例
生成后, 需要保存好(通常在 .ssh 目录)
- Save public key: 将公钥上传到对应代码托管平台(旧 Key 删掉), 公钥可通过
Load
私钥获得, 所以可不保存 - Save private key: 将私钥保存为
ecdsa.ppk
密钥文件(PuTTY Key Generator 不支持查看/保存文本私钥)
在使用 Tortoise Git 上传下载 git:// 链接的代码时, 需要配置 PuTTY 私钥 ecdsa.ppk
也可以通过 ssh-keygen 命令生成公私钥文本文件. 然后通过上述工具的 Load 功能将私钥文本文件做成 .ppk 格式