2022-09-24
班门弄斧
00

目录

前提
启动ssh-agent
生成SSH密钥
将SSH密钥添加到账户
添加配置文件
测试SSH连接
常见报错
提示
多用户密钥配置

基于Windows 10

前提

学习本文,你应该拥有以下技能:

  1. 了解Windows环境下git bash的基本使用。
  2. 已拥有GitHub帐号,并可以登录。
  3. 已安装git agent

启动ssh-agent

cmd运行ssh-agent即可

如果报错unable to start ssh-agent service, error :1058,可能是你的服务被禁止启动,在服务管理里找到名为OpenSSH Authentication Agent的服务,将其改为手动,再尝试运行ssh-agent

参考:Starting ssh-agent on Windows 10 fails: "unable to start ssh-agent service, error :1058"

请确保ssh-agent服务已启动再执行下一步!

生成SSH密钥

官方文档

  1. 运行 Git Bash
  2. 运行以下命令生成ssh密钥命令中 your_email@example.com 替换为你的邮箱地址
shell
ssh-keygen -t ed25519 -C "your_email@example.com"

**注:**如果您使用的是不支持 Ed25519 算法的旧系统,请使用以下命令:

shell
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  1. 执行命令后,输入密钥信息:密钥存储路径和文件名(文件名建议指定,路径建议默认即可)、密码(可忽略

其中/c/Users/xxhu5/.ssh/为指定目录,id_ed25519_ff为指定文件名

image-20220831133923044

  • 将刚创建好的密钥添加到ssh-agent
shell
ssh-add ~/.ssh/id_ed25519_ff

将SSH密钥添加到账户

官方文档

  • git bash中运行以下命令,以复制指定公钥(注意是.pub文件)
shell
clip < ~/.ssh/id_ed25519_ff.pub
  • 找到GitHub配置页面

1661924802527

  • 设置密钥信息,完成添加
image-20220831134852499

点击Add后,会输入github密码确认,确认后即可完成添加。

添加配置文件

  1. 进入特定文件夹。一般在**生成SSH密钥**时,会自动在系统盘当前用户下创建.ssh文件夹,如我的文件地址:C:\Users\xxhu5\.ssh\
  2. j进入文件夹后,打开git bash命令行界面
  3. 运行touch config命令,创建config文件
  4. 运行vim config命令,编辑config文件
  5. 将以下内容复制到文件内,并修改其中的内容

如果无法通过以上命令操作来创建和编辑文件,手动创建config文件也可以。

Host ff HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_ed25519_ff
  • 文件内容说明:
    • Host:本地名称,可自定义【重要:后续运行Git相关命令时,需要使用】
    • HostName:真实地址,一般是固定的仓库地址,如github.comgitee.com
    • PreferredAuthentications:密钥类型,一般默认publickey
    • IdentityFile:密钥文件地址,即通过**生成SSH密钥**生成的文件

测试SSH连接

官方文档:testing-your-ssh-connection

  • 进入本地仓库目录
  • 打开git bash,执行如下
shell
ssh -T git@ff
  • 输出以下内容即表示成功
Hi DingDangDog! You've successfully authenticated, but GitHub does not provide shell access.

第一次连接可能会出现如下警告,输入yes即可连接。

shell
The authenticity of host 'github.com (IP ADDRESS)' can't be established. RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. Are you sure you want to continue connecting (yes/no)?

常见报错

错误1:若继续出现如下提示,请检查排查密钥配置是否正确。

shell
git@ff: Permission denied (publickey).

错误2:出现如下警告,是因为我重装系统,known_hosts中存在错误配置,删除.ssh文件夹下的known_hosts文件,重新执行ssh -T git@ff即可。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ED25519 key sent by the remote host is SHA256:+*************************. Please contact your system administrator. Add correct host key in /c/Users/admin/.ssh/known_hosts to get rid of this message. Offending ED25519 key in /c/Users/admin/.ssh/known_hosts:2 Host key for github.com has changed and you have requested strict checking. Host key verification failed.

提示

若运行ssh -T git@ff命令成功后,运行git push时仍然报错Permission denied(无权限),一般是由于远程仓库地址的问题,请检查本地仓库配置的远端地址是否正确。

常见错误地址:

错误1:https://github.com/DingDangDog/learn.git:仍然是Https方式的地址,应切换为ssh地址。 错误2:git@github.com:DingDangDog/learn.git:以本文演示为例,git@github.com应替换为git@ff

如下图使用命令查看 image-20220831135837199

发现是Https的URL,需要切换为git,如下图在仓库中查看 ssh 地址

image-20220831140253140

shell
git remote set-url origin git@ff:DingDangDog/learn.git

多用户密钥配置

如果在单用户时已经配置了config文件,那么在变更为多用户时,只需重复以上步骤,并在config中增加配置即可。

如果以前没有配置config文件,则回到【添加配置文件

  • config

config文件中配置多个Host即可,如下

Host ddd HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_ed25519_ddd Host ff HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_ed25519_ff
  • 命令

使用时,默认的Git远程仓库地址git@github.com应替换为git@[Host]

shell
# 绑定本地,注意@后边是config文件中配置的Host ssh -T git@ddd # 切换指定仓库的地址为ssh方式,注意ddd为config文件中配置的Host git remote set-url origin git@ddd:DingDangDog/learn.git # 推送 git push
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:DingDangDog

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!