GitHub中SSH的配置
讲解使用Git的文章很多.
大部分使用Git的同学对GitHub不会陌生.
在Linux & mac 下, 通过使用SSH协议来与GitHub进行通信是一个既方便又安全的做法.
以下基本是GitHub Help - Generation SSH keys的翻译, 在此之上增加了一些知识的拓展介绍.
首先推荐阅读数字签名是什么
在了解了数字签名中的公私密钥之后再去理解SSH就很容易了. 接着往下看吧
你需要做什么?
这里列出你需要做的:
- 本地生成公私密钥(成对)
- 分发公钥到服务提供主机(这里是GitHub给你提供的Repositories空间)
- 测试并使用
就这么多.
生成一对公私密钥
首先.在本地生成一对秘钥(公私密钥). 在终端中输入:
$ ls -al ~/.ssh
这会列出~/.ssh中所有文件. 在默认情况下, 名称为id_dsa与id_dsa.pub分别为一对公私秘钥(.pub为公钥). 若在列出的文件中没有出现一对公私密钥, 你就需要自己生成了.见如下:
$ ssh-keygen -t rsa -C "你的邮箱地址@example.com"
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]
接下来系统会要求你给你的密钥输入密码, 你可以直接点击enter来输入空密码(不建议).这里有的同学会想, 每次进行ssh验证的时候都需要输入密码, 会不会很麻烦, 这里不用担心, 我们可以通过使用ssh-agent来帮你你管理你的密钥, 这样就不用每一次都输入密码了, 关于ssh-agent会在后面提到.
创建了密码之后, 你的一对公私密钥就生成好了. 默认情况下会保存到~/.ssh/目录下, 默认名称为id_rsa与id_rsa.pub. 终端的输出大概是这个样子的
Your identification has been saved in /Users/you/.ssh/id_rsa.
Your public key has been saved in /Users/you/.ssh/id_rsa.pub.
The key fingerprint is:
01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com
现在, 该是ssh-agent登场了, 你可以让ssh-agent来管理你的私钥, 这样你就不用每次进行ssh验证的时候都要输入密码了. 在终端中输入
# 启动ssh-agent
$ eval "$(ssh-agent -s)"
Agent pid 7649
$ ssh-add ~/.ssh/id_rsa
以上最后一行的作用是添加id_rsa私钥到ssh-agent中, 此时会要求你输入创建这对公私密钥时的密码.
输入密码之后, 你的私钥就成功的交由ssh-agent管理了.
分发公钥到你的GitHub账户上
首先你需要将你的公钥内容(一个加密字符串)复制到剪贴板, 使用如下命令
$ pbcopy < ~/.ssh/id_rsa.pub
pbcopy这个命令是在mac使用的. 这个命令复制文件的内容到当前剪切板中. 通过这样的方式可以避免通过文本编辑器打开文本再进行复制粘贴的繁琐操作.
接下来就是分发公钥了
- 登陆你的GitHub账户, 在页面右上角点击
Settings进入个人设置页面 - 点击左边的
SSH keys, 然后点击Add SHH key进行公钥的添加 - 给你的公钥起一个容易标记的名字, 一般是你的设备的名字, 比如
Personal MacBook Air - 将你复制的公钥字符串粘贴到
key中, 然后点击Add key完成公钥的分发.
测试你的ssh
在终端中输入
$ ssh -T git@github.com
在开始的时候会显示
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)?
没关系. 这是正常的, 此时你应该核对一下在终端中显示的fingerprint与在GitHub中显示的是否一致, 若没有问题的话, 输入yes.
若一切正常的话, 你应该会在终端中看到如下的输出
Hi 你的GitHub账户! You've successfully authenticated, but GitHub does not
provide shell access.
出现如上信息表明你的GitHub ssh公钥已经正确分发并测试通过.
拓展
ssh-agent
ssh-agent是一种控制用来保存公钥身份验证所使用的私钥的程序,其实ssh-agent就是一个密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程.
注意 当你退出终端的登陆之后, 你的ssh-agent也就关闭了. 再下次使用ssh的时候, 你必须重新启动ssh-agent并重新添加私钥到ssh-agent中.
以上的步骤虽然少, 但是每次进行ssh验证的时候都需要重复进行, 可以考虑编写脚本, 放在/ect/profile.d中.
pbcopy
它是shell里操作剪切板的工具, 以上的例子$ pbcopy < ~/.ssh/id_rsa.pub使用了标准输入重定位符<将公钥的内容输入到剪切板.
ssh
是Secure Shell的缩写. 工作于应用层和传输层. 是基于软件的加密解决方案(一种协议).
一般来说, 我们使用的都是OpenSSH(这是个使用SSH加密解决方案的软件)
SSH由两个部分组成: 客户端和服务端.
by max2oi
浙公网安备 33010602011771号