赞
踩
很简单,网络上一搜一大把,看最新日期的
网上的教程很多是没有时效性的,因此我们会遇到很多坑,所以我推荐大家看github官方的帮助文档来进行SSH连接github。但是有一些需要注意的地方,可以帮助你更好地去完成连接。
官方文档中的说明如下图所示,具体用什么方法生成,参考这里 。网上很多教程太老了,还是使用RSA算法生成的密钥来进行教程。
这篇文章讲的很通俗易懂,这里就不多说了,理解公钥、私钥和数字签名的意义和区别!
官方文档对SSH key password的介绍 。这里需要补充一下这篇文档里面中的“Starts automatically on Git for Windows ssh-agent”部分,这部分就是教你如何设置使得gitbash每次开机初次启动时自动启动ssh-agent,从而让你只需要初次启动gitbash时输入一次ssh key password即可,避免每次连接时都输入ssh key password。这里对官方教程代码进行部分修改
env=~/.ssh/agent.env agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; } agent_start () { (umask 077; ssh-agent >| "$env") . "$env" >| /dev/null ; } agent_load_env # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?) if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then agent_start ssh-add ~/.ssh/one_rsa # 添加你自己的私钥,即指定想要ssh-agent导入的私钥位置来覆盖ssh-agent默认私钥。因为官方教程代码这里没有指定路径,则会按照将默认目录~/.ssh下与默认的id_rsa私钥一样的私钥密码(ssh key password)私钥一同导入ssh-agent,如果没有具有相同私钥密码的其他私钥,则只会导入id_rsa. elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then ssh-add ~/.ssh/one_rsa fi unset env #现在,当您初次运行 Git Bash 时,系统将提示您输入密码;关闭gitbash,ssh-agent 进程将继续运行,直到您注销、关闭计算机或手动终止该进程。这里不会产生与下文说的重新开启一次gitbash就会启动一个新的ssh-agent进程问题,而是只会产生一个进程。
这里介绍的git for windows里面的方法对于windows系统并不能在gitbash关闭之后自动执行~/.bash.logout文件,所以你关闭gitbash都不会自动关闭ssh-agent,而每次打开gitbash都会创建一个新的ssh-agent,可以看任务管理器进程发现这个问题。
什么是ssh-agent以及ssh-agent的常用命令语句请看这里!文章里面缺失的ssh-agent原理图如下所示。
上面那张图中第二句话的意思是,复制程序框中的代码放入git的profile文件或者bashrc文件中,即可实现利用ssh-agent管理ssh key password。“~/.”是相对路径,指的是使用电脑的当前用户文件夹(例如:C:\Users\13473)。但是当你去此文件夹下寻找profile和bashrc文件时,你是找不到的,也没有被隐藏,需要你自己创建。
创建方法如下:
在gitbash命令栏中输入
touch ~/.bashrc
在当前用户目录下创建bashrc文件,然后用编辑器(或者记事本)打开该文件,将上图的代码框中的代码复制进入保存即可。
关于bashrc的具体介绍可以看下文profile、bashrc和bash_profile的区别部分内容
当在gitbash中输入以下测试连接的代码
$ ssh -T git@github.com
出现下图的超时提醒
不要慌,而且你会发现你ping github.com也会超时!原因是因为DNS解析该网址的所在ip延迟实在太高了,可以去此网站查看github.com不同ip的响应速度,默认的DBS解析的ip响应是超时的,因此我们需要手动修改ip!
方法如下(该方法可以帮助你git利用ssh协议与github进行连接(一般不需要任何科技,但是如果pull和push过程中总是超时,那么可能需要给git加个代理进行科科学上网,具体方法见下面“git如何设置代理”部分内容),但是对于github网页的访问效果不好,还是需要科学上网):
1.到这个地址 https://raw.hellogithub.com/hosts 下载最新的github hosts文件,找到github.com的ip地址。
2.修改本地配置, 在 C:\Windows\System32\drivers\etc\hosts
中录入上述github地址(直接将上图一行信息都复制到hosts文件中保存即可),保存并退出即可登录github了。
3.如果仍然不好使,可以在 cmd窗口执行 ipconfig /flushdns 命令清理下本机的dna解析信息。
4.再次测试连接应该不会提示超时了
这里额外补充如何修改本地的hosts文件
将hosts文件复制到桌面,然后使用记事本编辑,修改完成后,再去替换掉系统盘的hosts文件,这样可以解决你的编辑器可能没有管理员权限无法修改hosts文件的问题。
具体实现可以参考这篇文章,写的很详细。具体就是根据你代理所使用的协议(http或者stocksv5)进行相对应的修改,这里需要注意的是最新的clash已经支持两个协议共用一个端口的功能,所以直接二选一即可。
具体操作过程如下:
打开~/.ssh路径下的config文件,添加如下代码
Host github.com
User git
ProxyCommand connect -H 127.0.0.1:7890 %h %p
如果你用的是clash来进行科学上网直接这样设置就行,这样你的ssh针对github的代理就设置完成了。其余细节讲解部分参考上述文章。
参考这篇文章,本部分需要对启动顺序和一些其余关系进行细节讲解。如果你知识储备充足可以看这篇详细的介绍文章来感受bash_profile和bashrc的区别。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。