新电脑设置git-ssh

换了家里的电脑登陆git始终遇到ssh登陆错误,使用密钥登陆不能正常通过,又不想申请新的密钥(虽然最后是这么办的,之前的密钥需要密码确认,嫌麻烦,这次就取消密码了),花了不少时间,走了冤枉路,所以每次的坑都会记录下来,我才是不是那个经常踩坑的人呢~~

提出问题:如何在新电脑添加已存在的密钥并且让git使用它正常连接到github

1.添加已有的id_sra到ssh-agent

使用github给开源项目添加ssh后需要在本地将私钥添加到ssh-agent,通常网上给出的方法是在git bash界面中输入:

ssh-add 私匙文件路径

然而,在windows下通常会报错:

Could not open a connection to your authentication agent

解决方法: 打开git Bash命令行,依次执行

1.exec ssh-agent bash

2.eval ssh-agent -s

3.ssh-add "XXX\.ssh\id_rsa_github"

**引号中的路径就是你私钥文件的路径

但是,在Windows下,ssh-agent 进程将继续运行,直到您注销、关闭计算机或终止该进程。 重启Windows后,如果按照第一步中的方法进行设置,可能每次打开Git Bash,需要手动添加私钥到ssh-agent。所以为了使我们每一次打开Git Bash时自动启动ssh-agent,进行如下设置:

找到Git的安装目录,再在安装目录下找到etc文件夹,进入etc,打开bash.bashrc文件,在文件末尾添加

# ssh-add private-key
eval "$(ssh-agent -s)"
ssh-add C:/Users/XXXXX/.ssh/id_sra_XXXXXXX
ssh-add ~/.ssh/私钥2

其中私钥1、私钥2换成自己私钥的名称即可。保存文件并退出,这样每次打开Git Bash就会自动执行ssh-agent代理。

2.让git使用新添加的密钥

网上教程到这里一般就没了,我操作后还是没法成功,后续需要让SSH服务器对每一组密钥对进行指定,也很简单,在.ssh文件夹里面添加说明:

vim ~/.ssh/config

复制以下内容,在Vim里按下小写字母p,然后再按下Esc键,输入:wq即可保存并退出。

Host github.com
    HostName github.com
    User git
    PreferredAuthentications publickey
    IdentityFile C:/Users/XXXXX/.ssh/id_sra_XXXXXXX

Host adoredee.github.com
    HostName github.com
    User git
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_hugo_githu

解释:

  • Host:Git识别名,是一个别名,如果使用Github上传下载代码,正常情况下是github.com,如果是多个Github账号,则需要起一个别名,建议命名规则为项目名/账户名.git服务器,比如adoredee.github.com第二个Host,第一个Host为正常命名:github.com;
  • HostName:服务器地址,Github地址为github.com、GitLab地址为gitlab.com、Gitee地址为gitee.com;
  • IdentityFile: 公钥文件所在的绝对路径; 验证SSH密钥,注意@后面是在~/.ssh/config文件中指定的"Host"

先验证第一个Host:github.com,运行

ssh -T [email protected]

显示

Hi adoredee! You've successfully authenticated, but GitHub does not provide shell access.

#git.bash里面操作都行
#cd d:\OneDrive\git\MyBlog
#git config --global user.name "biozhangjn"
#git config --global user.email "[email protected]"

#清除之前的SSH设置,4需要管理员权限
#git config --global -l
#git config --system -l
#git config --global --unset credential.helper
#git config --system --unset credential.helper

最后,重新在VScode里面进行相关操作,就可以正常的进行各项同步了,总结,添加旧的密钥并且让git知道用哪一个,over。

不过最后实验室电脑的VScode插件还是不能正常使用,应该哪里设置错误,不过deploy.sh可以正常工作,那也足够应付Blog更新了啦啦啦

参考

Jiannan Zhang
Jiannan Zhang
Associate Professor

My research interests include Avian Physiology, Endocrinology and Metabolism.

Related