Rexdf

The devil is in the Details.

git多站点多用户SSH配置

| Comments

git默认情况下会在~/.ssh/id_rsa获取认证信息,但是如果有多个账户在github或者多个不同的站点同步的话,就需要配置了,虽然有不少站点支持上传id_rsa.pub公钥但是个人还是推荐不同的站点使用不同密钥对,这样有利于养成良好的安全习惯。首先是生成新的密钥对,下面详细说一下Windows平台上Cygwin上面的情况,这个平台最近越发喜欢用,因为最近更新比较频繁,与新的Win8系统兼容基本没有问题。而我需要用的Ruby和Perl现在都不单独下载了(或者即使下载了,但是不会加到Path里面需要用的使用在命令行上面手动SET PATH=ruby;%PATH%这样),因为Cygwin集成的环境很不错很多Ruby程序都是直接运行的。好了下面说多站点账户git的ssh配置方法:

1.生成密钥

生成密钥需要使用ssh-keygen命令,此命令会提示保存目录

ssh-keygen -t rsa -C 'rexdf@vip.qq.com'

[caption id=”attachment_1848” align=”alignnone” width=”997”]ssh-keygen ssh-keygen[/caption] 成功后可以执行下面这句(实际上可以不用),使ssh识别

ssh-add ~/.ssh/id_rsa_zend

2.上传密钥

到你的网站设置你的id_rsa_zend.pub,在github上面则是复制其中的文本内容,有的网站则是上传此文件.

3.配置config

在~/.ssh/下面编辑config文件如果没有

# Default github user(first@mail.com)
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa

# second user(second@mail.com)
Host mysite
HostName git.mysite.com
User git_mysite
IdentityFile ~/.ssh/id_rsa_second

[caption id=”attachment_1849” align=”alignnone” width=”308”]config文件 config文件[/caption]

4.修改URL

git clone ssh://[用户名@]URL 这里需要把URL的主机部分替换成mysite这样就可以自动使用新的密钥了。

git clone ssh://git_mysite@mysite/repo/app.git

5.问题解决

这里会涉及到Cygwin在Win上面第一个bug,不过Linux下面按照上面是没有问题的。正常情况应该会出现下面的画面

Bad owner or permissions on /home/rexdf/.ssh/config
fatal: The remote end hung up unexpectedly

[caption id=”attachment_1850” align=”alignnone” width=”680”]config权限 config权限[/caption] 以及

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0660 for '/home/rexdf/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /home/rexdf/.ssh/id_rsa
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
fatal: The remote end hung up unexpectedly

[caption id=”attachment_1851” align=”alignnone” width=”947”]Permissions 0660 for '/home/rexdf/.ssh/id_rsa' are too open. Permissions 0660 for ‘/home/rexdf/.ssh/id_rsa’ are too open.[/caption] 而且即使你进入.ssh 执行

chmod 600 id_rsa id_rsa_zend config

却问题依然,执行ls -l结果如下

$ ls -l
total 12
-rw-rw---- 1 rexdf None  538 Oct  7 11:34 config
-rw-rw---- 1 rexdf None 1679 Oct  6 13:43 id_rsa
-rw-rw-r-- 1 rexdf None  394 Oct  6 13:43 id_rsa.pub
-rw-rw---- 1 rexdf None 1675 Oct  7 11:24 id_rsa_zend
-rw-rw-r-- 1 rexdf None  398 Oct  7 11:24 id_rsa_zend.pub
-rw-rw-r-- 1 rexdf None  420 Oct  6 13:44 known_hosts

可以看到id_rsa id_rsa_zend config三个文件权限都是660而不是600(需要提醒下,如果文件系统是FAT32,则不需要往下看了,NTFS才支持权限)。是Cygwin的bug吗?是的。是chmod命令根本没用吗?不完全是。实际上你可以执行chmod 1 config看看,可以正确执行的。问题在于上面显示的那个None,这个是Linux的用户组,对应的是组权限而在Cygwin对于None的组是没法赋予权限的,于是组权限就等于拥有者的权限了。解决办法是随便赋予一个组然后再chmod就OK了。

chgrp Users id_rsa_zend id_rsa config
chmod 600 id_rsa_zend id_rsa config

[caption id=”attachment1852” align=”alignnone” width=”775”]权限修改 权限修改[/caption] [caption id=”attachment1853” align=”alignnone” width=”797”]git成功 git成功[/caption]

Comments