来源 | https://www.lazycoffee.com/articles/view?id=5c8e6037c05ac041f1c24581
这段时间一直没办法克隆github的库,只能使用https,但要每次操作要输入密码,相当的麻烦。 为了找出问题,只能从头开始研究如何用ssh来clone github 的库,过程并不复杂,知道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服务器也同时支持这些算法,否则会连接失败。
更多内容请参考: 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连接,所以你可以重复下面操作,添加多个电脑的公钥。
使用命令
pbcopy < ~/.ssh/id_rsa.pub
或者文本查看器(vi、vim、nano等)拷贝。
5、在Title里输入公钥的备注,例如:home computer 8、有可能弹出密码输入框,输入你的github密码即可: 拷贝git库
现在你应该可以通过ssh直连github库了,使用以下命令即可把git库下载到当前目录:
其它问题
如果出现:
ssh_exchange_identification: Connection closed by remote host
错误,有可能是:
2、dns被污染了,在hosts里绑定以下ip即可:
旁通
大多数的git服务商都提供ssh连接服务,例如gitlab、coding、gerrit等等,其原理都是一样,操作大同小异,大家可以阅读ssh和git更多内容,更深入去把玩。