cvooc

github配置sshkey及TortoiseGit(小乌龟)

github 配置 sshkey 及 TortoiseGit(小乌龟)

参考链接

前言

截至 2023 年 2 月, 部分最新的 linux 系统已默认禁用 rsa-sha1 签名算法, 故更新本文档生成 sshkey 使用到的签名算法为 id_ed25519

很多朋友在用 github 管理项目的时候,都是直接使用 https url 克隆到本地,当然也有有些人使用 ssh url 克隆到本地.然而,为什么绝大多数人会使用 https url 克隆呢?

这是因为,使用 https url 克隆对初学者来说会比较方便,复制 https url 然后到 git Bash 里面直接用 clone 命令克隆到本地就好了.而使用 ssh url 克隆却需要在克隆之前先配置和添加好 ssh key .

因此,如果你想要使用 ssh url 克隆的话,你必须是这个项目的拥有者.否则你是无法添加 ssh key 的.

HTTPS 和 SSH 的区别

  1. https 可以随意克隆 github 上的项目,而不管是谁的;而 ssh 则是你必须是你要克隆的项目的拥有者或管理员,且需要先添加 sshkey,否则无法克隆.
  2. https url 在 push 的时候是需要验证用户名和密码的;而 ssh 在 push 的时候,是不需要输入用户名的,如果配置 sshkey 的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的.

1. github 配置 sshkey

1.1 配置 git 个人信息

配置个人用户信息和电子邮件地址

git config --global user.name “用户名”
git config --global user.email “你的邮箱”
git config --list (查看所有配置项)

1.2 添加 SSH 密钥

1.2.1 查看现有的 SSH 密钥

$ ls -al ~/.ssh

1.2.2 生成新 SSH 密钥

// 安装git后,在你电脑上打开cmd或 git bash,输入命令
// your_email@example.com为登录GitHub仓库的邮箱
ssh-keygen -t ed25519 -b 4096 -C "your_email@example.com"

//输入后会询问是否以输出额外文件去保存,这里推荐直接回车,
//直接回车会在.ssh文件夹 认生成id_ed25519 和id_ed25519.pub两个文件
//如果选择额外输出同样会生成类似的两个文件
Enter file in which to save the key (/c/Users/username/.ssh/id_ed25519):

// 如果你曾经配置过,现在要重新生成,会询问你是否覆盖,如果你第一次配置,则不会出现此询问
/c/Users/username/.ssh/id_ed25519 already exists.
Overwrite (y/n)?

// 接下来它会询问是否需要密码,建议直接回车,回车默认没有密码
Enter passphrase (empty for no passphrase):

// 再次输入密码,建议直接回车
Enter same passphrase again:

// 提示生成成功,请在C盘>用户>你的用户名>.ssh 去查看
Your identification has been saved in /c/Users/username/.ssh/id_ed25519
Your public key has been saved in /c/Users/bingq/.ssh/id_ed25519.pub
SHA256:The key's randomart image is:

1.3 将 SSH 密钥添加到 ssh-agent

1.3.1 在后台启动 ssh-agent

$ eval "$(ssh-agent -s)"
> Agent pid 59566

1.3.2 修改~/.ssh/config文件以自动将密钥加载到 ssh-agent 中并在密钥链中存储密码

Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519

1.3.3 将 SSH 私钥添加到 ssh-agent 并将密码存储在密钥链中

$ ssh-add -K ~/.ssh/id_ed25519

2. 添加密钥到 GitHub

  1. 打开 /.ssh/id_ed25519.pub 文件,将内容复制到剪贴板
  2. 单击右上角头像
  3. 单击Settings
  4. 单击SSH and GPG keys
  5. 单击 New SSH Key
  6. 填写Title并将/.ssh/id_ed25519.pub文件内容粘贴到Key
  7. 单击Add SSH Key完成
  8. 如果出现提示,请确认你的 GitHub 密码
  9. 页面自动跳转后,你会发现你多了一个灰色的钥匙,这是因为你从未使用过这个 Key

3. 测试 SSH 连接

// 打开git bash 输入以下内容,通过该地址验证key
//git@github.com不用改成你的邮箱地址,验证地址就是这个
ssh -T git@github.com

// 询问你是否继续连接,输入yes
The authenticity of host 'github.com (xx.xxx.xxx.xx)' can't be established.
RSA key fingerprint is SHA256:略.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

// 如果成功,他会发出以下内容
// 如果失败,请尝试在GitHub上删除生成的key,然后重新添加,注意复制时末尾不要有空格(可能会影响)
// 如果还是失败,可以联系我
Warning: Permanently added 'github.com,xx.xxx.xxx.xx' (RSA) to the list of known hosts
Hi yourname! You've successfully authenticated, but GitHub does not provide shell access.

4. 配置总结

到这一步,便完成了 sshkey 的配置,你可以到 Setting>SSH and GPG keys 看到钥匙变绿,在 GitHub 仓库中复制仓库 ssh 地址进行克隆尝试,如果你不使用小乌龟,那么本文看到这里便可以了.

5. TortoiseGit(小乌龟)设置 pageant 开机自启动且自动加载 SSH Key

TortoiseGit 无法使用 git 生成的 ssh-key 需要转化为 ppk 公钥,然后就产生每天上班第一件事就是打开 Pageant ,然后去加载公钥,比较麻烦,现在我们把这件重复的事情设置为开机自启动

5.1 生成 ppk 文件

  1. 首先找到 TortoiseGit 的安装目录的 bin 目录,然后找到 puttygen.exe 运行 或是 window 键打开开始菜单,搜索 puttygen 点击运行

QQ图片20210716163403

  1. 点击 conversions 中的 Import key 来加载 git 生成的 ssh key 文件

image-20210716163544968

image-20210716163635292

  1. 选择完毕后点击 save private key 按钮保存生成的 ppk 文件下面要用

image-20210716163734215

5.2 加载 PPK 文件

  1. 首先找到 TortoiseGit 的安装目录的 bin 目录,然后找到 pageant.exe 运行 或是 window 键打开开始菜单,搜索 pageant 点击运行,他不会直接弹框,需要在任务栏中点击才有弹框

image-20210716163838257

image-20210716163921293

  1. 点击 add key 选择加载之前保存的 ppk 文件,直接 close 就可以,这样就直接可以使用 TortoiseGit 提交代码

image-20210716164034860

  1. 但是这不是我们现在的最终目的,我们的最终目的是能自动启动加载,咱们接着往下设置

6. TortoiseGit(小乌龟)设置 pageant 开机自启动且自动加载 SSH Key

1.首先找到 TortoiseGit 的安装目录的 bin 目录,然后找到 pageant.exe 运行 或是 window 键打开开始菜单,搜索 pageant 右键打开文件夹所在位置创建并复制快捷方式

image-20210716164222541

  1. window+r 输入 shell:startup;点击确定将复制好的快捷方式放入该目录下

image-20210716164326743

3.右键属性中找到快捷方式,在目标后面拼上 ppk 文件的目录

image-20210716164442851

image-20210716164506990

至此我们的生成 ppk 文件并设置开机自启动就完成了,之后我们就可以安心的使用小乌龟提交代码,而不需要其他验证了.