来源 | https://www.lazycoffee.com/articles/view?id=5c8e6037c05ac041f1c24581
这段时间一直没办法克隆github的库,只能使用https,但要每次操作要输入密码,相当的麻烦。
为了找出问题,只能从头开始研究如何用ssh来clone github 的库,过程并不复杂,知道ssh原理的老司机更容易理解。
ssh数据传输
非对称加密数据传输是ssh交换数据的唯一方法,这种方式必须用到公钥和私钥,所以要使用ssh来连接github库(同理所有git库),就需要向github提交公钥(为啥不是私钥?
因为只有私钥才能解开公钥加密的内容,反之公钥却不可以解私钥的内容)。
一、检查是否已有公/私密钥
如果你的电脑已经有公钥和私钥了,那就不用再生成,可以跳过第二步。
公钥和密钥一般在
~/.ssh/
下,输入以下命令即可确认是否存在(windows需要安装git工具库后使用git bash来运行,接下来都是):
如果有下面这两个文件:
id_rsa(私), id_rsa.pub(公),就表示已存在公/私密钥了:
-rw------- 1 user group 1843 Feb 24 17:49 id_rsa
-rw-r--r-- 1 user group 413 Feb 24 17:49 id_rsa.pub
二、生成公/私密钥
经过上面的检查发现没有公私密钥,那就需要自已手动去生成一对。
方法是使用ssh命令行工具(windows需要git bash,接下来都是),执行命令:
其间会要求你输入以下内容:
1、输入公钥私钥保存的文件路径,回车默认
~/.ssh/
,一般直接回车即可。
2、输入私钥的密码(使用私钥密码可以大幅提升安全系数,但每次使用ssh连接都必须输入该密码,会有点麻烦,对于全要求不是非常高的用户不必使用)
3、再输入一次私钥的密码,如果你之前没输入,这里直接回车即可
现在你可以重复第一步检查是否生成成功。
更安全的算法(可选)
如果ssh-keygen默认的rsa算法生成的钥匙不能满足你对安全性的要求,你可以使用
-b 4096
参数(github推荐)提高钥匙位数,增加复杂度,也可以使用更高级别的算法,例如ecdsa、ed25519,前提是git服务器也同时支持这些算法,否则会连接失败。
使用rsa算法,4096位:
使用ed25519算法:
更多内容请参考:
https://www.ssh.com/ssh/keygen/
三、配置ssh默认密钥
如果以上你都是默认配置,这一步可以直接跳过,否则需要手动配置ssh连接时指定的密钥。
1、在
~/.ssh/config
输入以下内容:
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
2、把私钥添加到ssh客户端中。
如果你不是使用默认的密钥名称,则把下面命命的
id_rsa
替换成你的密钥名。
如果使用的是苹果电脑,可以使用
-k
参数,同时添加私钥的密码。
四、在github中添加公钥
github像大多数git服务一样,都是能添加多个公钥,以便在多台电脑上使用ssh连接,所以你可以重复下面操作,添加多个电脑的公钥。
1、拷贝公钥
使用命令
pbcopy < ~/.ssh/id_rsa.pub
或者文本查看器(vi、vim、nano等)拷贝。
2、在github网站右上角,打开用户设置:
3、点击左则ssh pgk设置:
4、点击右上角,添加公钥:
5、在Title里输入公钥的备注,例如:home computer
6、在key里粘贴公钥的内容:
7、点击Add SSH key
8、有可能弹出密码输入框,输入你的github密码即可:
拷贝git库
现在你应该可以通过ssh直连github库了,使用以下命令即可把git库下载到当前目录:
其它问题
如果出现:
ssh_exchange_identification: Connection closed by remote host
错误,有可能是:
1、git的版本太旧了,更新一下即可。
2、dns被污染了,在hosts里绑定以下ip即可:
旁通
大多数的git服务商都提供ssh连接服务,例如gitlab、coding、gerrit等等,其原理都是一样,操作大同小异,大家可以阅读ssh和git更多内容,更深入去把玩。