使用 ssh 连接 Github 代码库超详细教程

发布:elantion 日期:2019-03-17 阅读:573 评论:0

这段时间一直没办法克隆github的库,只能使用https,但要每次操作要输入密码,相当的麻烦。为了找出问题,只能从头开始研究如何用ssh来clone github 的库,过程并不复杂,知道ssh原理的老司机更容易理解。

ssh数据传输

非对称加密数据传输是ssh交换数据的唯一方法,这种方式必须用到公钥和私钥,所以要使用ssh来连接github库(同理所有git库),就需要向github提交公钥(为啥不是私钥?因为只有私钥才能解开公钥加密的内容,反之公钥却不可以解私钥的内容)。

一、检查是否已有公/私密钥

如果你的电脑已经有公钥和私钥了,那就不用再生成,可以跳过第二步。公钥和密钥一般在~/.ssh/下,输入以下命令即可确认是否存在(windows需要安装git工具库后使用git bash来运行,接下来都是):

ls -al ~/.ssh

如果有下面这两个文件: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,接下来都是),执行命令:

ssh-keygen

其间会要求你输入以下内容:

1、输入公钥私钥保存的文件路径,回车默认~/.ssh/,一般直接回车即可。

Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]

2、输入私钥的密码(使用私钥密码可以大幅提升安全系数,但每次使用ssh连接都必须输入该密码,会有点麻烦,对于全要求不是非常高的用户不必使用)

Enter passphrase (empty for no passphrase): [Type a passphrase]

3、再输入一次私钥的密码,如果你之前没输入,这里直接回车即可

Enter same passphrase again: [Type passphrase again]

现在你可以重复第一步检查是否生成成功。

更安全的算法(可选)

如果ssh-keygen默认的rsa算法生成的钥匙不能满足你对安全性的要求,你可以使用-b 4096参数(github推荐)提高钥匙位数,增加复杂度,也可以使用更高级别的算法,例如ecdsa、ed25519,前提是git服务器也同时支持这些算法,否则会连接失败。

使用rsa算法,4096位:

ssh-keygen -t rsa -b 4096

使用ed25519算法:

ssh-keygen -t 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替换成你的密钥名。

ssh-add ~/.ssh/id_rsa

如果使用的是苹果电脑,可以使用-k参数,同时添加私钥的密码。

ssh-add -K ~/.ssh/id_rsa

四、在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库下载到当前目录:

git clone git@github.com:xxx/xxx.git

其它问题

如果出现:ssh_exchange_identification: Connection closed by remote host 错误,有可能是:

1、git的版本太旧了,更新一下即可。

2、dns被污染了,在hosts里绑定以下ip即可:

192.30.253.112 github.com

旁通

大多数的git服务商都提供ssh连接服务,例如gitlab、coding、gerrit等等,其原理都是一样,操作大同小异,大家可以阅读ssh和git更多内容,更深入去把玩。