GitHub, Bitbucket 都是项目托管服务器,都支持Gib版本控制,不过二者是有区别的。
Github 一般是能够正常访问的,Bitbucket访问不稳当;
Github 提供公开库和私有库,私有库需要付费,Bitbucket同时提供公有库和私有库,均免费。
Github只支持Git,Bitbucket同时支持Git和Mercurial(Hg)
参考:http://blog.aboutc.net/linux/37/github-bitbucket-connect-via-ssh-keys
本地克隆远程仓库 bitbucket.org,一般默认是这样:
git clone https://[email protected]/username/xxx.git
如果配置了SSH之后,且SSH连接正常,那么就可以
git clone ssh://[email protected]/username/xxxx.git
注意 :
以上的 [email protected] 或 git@ip地址 是固定的,如果是 [email protected] 那克隆不下来。
本地克隆远程仓库github.com,一般默认是这样:
git clone https://[email protected]/username/xxxx.git
如果配置了SSH之后,且SSH连接正常,那么就可以
git clone ssh://[email protected]/username/xxxxx.git
注意:
以上的 [email protected] 或 git@ip地址 是固定的,如果是 [email protected] 那克隆不下来。
安装完成后会有Git Bash命令行工具,自带了ssh工具
会自动切换到当前用户目录下, Eg: /c/Users/xxxx
然后检测是否有 .ssh目录,初始安装git的时候是没有.ssh目录的
可以查看ssh版本
$ ssh -V
OpenSSH_6.6.1p1, OpenSSL 1.0.1m 19 Mar 2015
ssh-keygen -t rsa -f ~/.ssh/id_rsa -C youemail@example.com
其中参数t 是密钥类型,如果没有指定则默认生成用于SSH-2的RSA密钥,这里固定是rsa, 至少github和bitbucket都是rsa;
参数f 是指定生成密钥的文件名,如果没有指定此f参数,默认文件名是id_rsa,(注意这里文件名要固定id_rsa,因为Git Bash 的ssh命令连接的时候它只去找id_rsa文件,其它的不认,本人经过验证,这不知道算不算是一个BUG)
参数C 是备注
在执行命令的时候,会提示是否需要密码
Enter passphrase (empty for no passphrase): [输入一个密码]
Enter same passphrase again: [重新输入密码]
这个密码个人理解是使用私钥文件的时候是否需要密码,这里就不需要,直接回车 就可以。
ssh-keygen 命令的具体参数说明,
可参考: http://killer-jok.iteye.com/blog/1853451
命令执行完后,会在 .ssh 目录下生成 id_rsa, id_rsa.pub 两个文件,一个是私钥文件,一个是公钥文件,私钥文件本地保管,公钥文件在bitbucket.org和github.com 服务器上有用到
在账号设置里有个SSH KEY 相关的,Add Key ,然后将公钥文件id_rsa.pub文件里的内容复制到各自里面。
(bigbucket.org github.com可以公用一套公钥和私钥)
$ssh -T git@github.com –p 22
$ssh -T git@bitbucket.org –p 22
注意 以上必须是 git@ 而不是 username@
这时有人会问 为什么,这里我也不知道,只知道一定要这样,否则连接失败的。
参考:
http://stackoverflow.com/questions/23404204/ssh-keys-cygwin-bitbucket-permission-denied-publickey
还有 ssh 默认端口是22,github.com,bigbucket.org也是22, 所以上面的 –p可以忽略,如果是自己的git服务器那么就根据实际情况看配置的端口是多少,如果不是22,那么就需要参数 p
(步骤1): 检查生成的密钥文是否是 id_rsa , id_rsa.pub ,如果不是 请改名过来。
前面我也说过 –f ~/.ssh/id_rsa ,固定名称id_rsa, 或者不指定f,默认id_rsa,为什么要这样,我也不知道,不过我经过实际验证的确要这样。如果你不相信,可以按照下面的去试试:
Eg:
ssh-keygen -t rsa -f ~/.ssh/id_rsa_gitbitbucket -C "sshkey for git bitbucket"
然后按照别人说的新建一个config文件,在里面配置
Host gitbitbucket
HostName bitbucket.org
Port 22
User git
IdentityFile ~\.ssh\id_rsa_gitbitbucket
参考: http://dhq.me/use-ssh-config-manage-ssh-session
完了之后把 生成的id_rsa_gitbitbucket.pub 文件内容拷贝到 github.com,bitbucket.org 里面的SSH 里。
然后再执行
ssh –t git@bitbucket.org
还是会出现 Permission denied (publickey)
我就是按照网上说的配置config文件,或许你这样做不会出现错误,但本人的电脑还是出现那样的错误。为了查看原因的话,你可以在执行 ssh 命令的时候打开日志调试开关:
ssh –vT git@bitbucket.org
就会发现有这样的日志:
debug1: identity file /Users/you/.ssh/id_rsa type -1
# debug1: identity file /Users/you/.ssh/id_rsa-cert type -1
# debug1: identity file /Users/you/.ssh/id_dsa type -1
# debug1: identity file /Users/you/.ssh/id_dsa-cert type -1
.....
debug1: Next authentication method: publickey
debug1: Trying private key: /c/Users/lw.JET/.ssh/id_rsa
debug1: Trying private key: /c/Users/lw.JET/.ssh/id_dsa
debug1: Trying private key: /c/Users/lw.JET/.ssh/id_ecdsa
debug1: Trying private key: /c/Users/lw.JET/.ssh/id_ed25519
debug1: No more authentication methods to try.
Permission denied (publickey).
debug1: identity file /Users/you/.ssh/id_rsa type -1
如果是 -1 说明SSH找不到文件
所以说明Gib bash的ssh命令之后,只认id_rsa文件,在ssh-keygen -t rsa -f 的时候 文件名只能是 id_rsa, 其它的文件是无效的。
参考:
https://help.github.com/articles/error-permission-denied-publickey/
(步骤2) 如果(步骤1) 没问题,那请检查 复制到github.com 和 bitbucket.org的密钥内容是否和id_rsa.pub 文件里面的内容一样(除了 –C 的备注内容)
要确保一致
(步骤3)如果(步骤2)没问题,有的人说新生成的key没有加入ssh,会导致连接不上bitbucket
先ssh-agent,然后ssh-add ~/.ssh/id_rsa (私钥文件)
如果出现报错
Could not open a connection to your authentication agent,
那么说明Git Bash的ssh工具生成的key直接保存在ssh中了。
参考:http://blog.sina.com.cn/s/blog_83d846330101imf0.html
参考 http://www.tuicool.com/articles/3ayYRr
经过验证,Git Bash的ssh工具生成的key的时候确实将key直接保存在ssh中了。所以关键还是(步骤1) (步骤2)
通过执行
ssh -vT git@bitbucket.org
可以在日志里面看到ssh它还是去找 id_rsa文件,加上bitbucket.org和github.com 可以共用一套公钥和私钥, 所以个人认为配置 .ssh/config文件已经失去意义了,不需要配置了
如果步骤(1) (2) (3) 都检查OK的话,
执行命令
ssh -t git@bitbucket.org
如果出现这样的信息:
PTY allocation request failed on channel 0
那么也可以执行如下命令验证:
$ ssh -l git bitbucket.org
PTY allocation request failed on channel 0
logged in as xxxxx.
You can use git or hg to connect to Bitbucket. Shell access is disabled.
Connection to bitbucket.org closed.
如果出现以上信息,那说明已经ssh连接成功
剩下的就是上面开头提到的:
如果配置了SSH之后,且SSH连接正常,那么就可以
git clone ssh://[email protected]/username/xxxx.git
注意:以上的 [email protected] 或 git@ip地址 是固定的,如果是 [email protected] 那克隆不下来。
如果配置了SSH之后,且SSH连接正常,那么就可以
git clone ssh://[email protected]/username/xxxxx.git
注意:以上的 [email protected] 或 git@ip地址 是固定的,如果是 [email protected] 那克隆不下来。