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'
成功后可以执行下面这句(实际上可以不用),使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
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
以及
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ 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
而且即使你进入.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
One Response to git多站点多用户SSH配置