在Git远程连接中配置SSH

最近同时在使用Github和Coding,两者都支持Git仓库。而Git是目前世界上最先进的分布式版本控制系统,相较于SVN,分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作!当有网络的时候,再把本地提交推送一下就完成同步了,非常方便,Git得到了众多IT开发平台和工作者的青睐!

Linux上使用Git,在各发行版本中非常方便。Windows上使用Git,需要从Git官网直接下载(网速慢的可以去国内镜像或者迅雷下载),然后按默认选项安装即可。我选择的是Portable版本,需要自己设置环境变量,将git的位置添加到PATH 中即可。PortableGit中有两个可执行文件:git-bash.exe和git-cmd.exe,看名字就知道怎么回事了。建议使用git-bash,可记录命令历史。关于Git的具体命令使用,这里就不再赘述了。

1. 生成密钥文件

连续三次回车(即不做任何输入),email地址可以虚拟。

1
ssh-keygen -t rsa -C "yourmail@email.com" [-f ~/.ssh/name-rsa]

注意了,~在win10上一般指“C:\Users\你的用户名“这个文件夹,假如你没有自定义用户文件夹。[ ]中内容代表你可以自定义密钥生成位置及名称。默认不需要,如果你要生成多个密钥文件时,为了避免覆盖,可以添加此参数。

在~/.ssh中会看到生成的id_rsa.pub和id_rsa文件。Github and Coding双线部署,需在~/.ssh中新建config文件,其内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
Host github.com
HostName ssh.github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_rsa
Port 22

Host coding.net
HostName e.coding.net
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/coding_rsa
Port 22

Host后面的别名是为了区分不同SSH隧道,假设你有两个不同github.com账号,Host可分别设置为github1和github2。

2. 验证密钥

密钥文件生成后,按github.com和coding.net设置要求,将id_rsa.pub中内容全选复制粘贴过去。coding.net中分账户和部署公钥两个类型,部署公钥默认拥有该项目的只读权限,如果需要获取推送权限,不要忘记勾选部署公钥设置里的「授予推送权限」。具体可以见官方guideline。首次SSH登录时,需要通过验证是否可以登录,加v可以方便查找出错原因。如出现successfully authenticated字样就代表成功了!

1
ssh -vT git@github.com

有多SSH隧道时,git@github.com应替换为Host别名,即上面的github1或github2。

验证密钥时,如果出现以下问题:

Permissions 0644 for ‘~/.ssh/github_rsa’ are too open.

It is required that your private key files are NOT accessible by others.

说明系统认为这个文件的权限太大了,容易泄密,只需要改变文件权限即可。

1
sudo chmod 600 github_rsa

3. 双线Deploy

1
2
3
4
5
deploy:
type: git
repo:
github: git@github.com:usename/usename.git,master
coding: git@e.coding.net:usename/usename.git,master

Hexo同时deploy在Github和Coding时,_config.yml中添加以上字段,usename是具体账号名称。假设还有多个Github和Coding账号时,git@github.comgit@e.coding.net也应修改为Host别名。