当前位置 : 首页 » 文章分类 :  开发  »  Git-安装配置

Git-安装配置


Windows下安装msysgit

从Git官网 https://git-scm.com/downloads 或 msysgit(Git for Windows) http://gitforwindows.org/ 下载并安装Git for Windows。安装后就有了Git Bash命令行工具。,注意在“Configuring the line ending conversions”选项中,
第一个选项:如果是跨平台项目,在windows系统安装,选择;
第二个选项:如果是跨平台项目,在Unix系统安装,选择;
第三个选项:非跨平台项目,选择。
注意:msysgit会自动安装cygwin


SSH keys连接GitHub远程仓库

  • 1、生成SSH Key
    使用ssh-keygen命令生成新的密钥key,需要输入文件名的时候,直接回车用默认名称。

    C:\Users\MaSi\.ssh> ssh-keygen -t rsa -C "masi.1989@163.com"
    Generating public/private rsa key pair.
    Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa):<回车就好>
    

    然后系统会要你输入加密串(Passphrase),直接回车表示密码为空:

    Enter passphrase (empty for no passphrase):<输入加密串>
    Enter same passphrase again:<再次输入加密串>
    

    最后看到这样的界面,就成功设置ssh key了:


    Git生成ssh key
  • 2、添加SSH keys到GitHub
    登陆github页面,点击右上角的 Account Settings -> SSH Public keys -> add another public keys
    打开刚才生成的公钥文件id_rsa.pub,复制其内容粘贴到GitHub页面的文本框中。

  • 3、测试ssh连接是否成功
    Git Bash中执行:
    ssh -T git@github.com
    返回:

    $ ssh -T git@github.com
    Hi masikkk! You've successfully authenticated, but GitHub does not provide shell access.
    

说明连接成功。
增加-v参数可将整个传输过程中的操作都显示出来,哪一步出错很明显就可以看出来:

$ ssh -vT git@github.com
OpenSSH_7.1p2, OpenSSL 1.0.2g  1 Mar 2016
debug1: Reading configuration data /c/Users/MaSi/.ssh/config
debug1: /c/Users/MaSi/.ssh/config line 1: Applying options for github.com
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to github.com [192.30.252.123] port 22.
debug1: Connection established.
debug1: identity file /c/Users/MaSi/.ssh/id_rsa type 1
debug1: key_load_public: No such file or directory
debug1: identity file /c/Users/MaSi/.ssh/id_rsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.1
debug1: Remote protocol version 2.0, remote software version libssh-0.7.0
debug1: no match: libssh-0.7.0
debug1: Authenticating to github.com:22 as 'git'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client chacha20-poly1305@openssh.com <implicit> none
debug1: kex: client->server chacha20-poly1305@openssh.com <implicit> none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ssh-rsa SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8
debug1: Host 'github.com' is known and matches the RSA host key.
debug1: Found key in /c/Users/MaSi/.ssh/known_hosts:1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /c/Users/MaSi/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: Authentication succeeded (publickey).
Authenticated to github.com ([192.30.252.123]:22).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
Hi masikkk! You've successfully authenticated, but GitHub does not provide shell access.
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 3080, received 1776 bytes, in 0.5 seconds
Bytes per second: sent 6159.6, received 3551.8
debug1: Exit status 1

Permission denied (publickey)错误

原因
Permission denied (publickey)错误的原因就是找不到私钥文件,为什么这里会出现这种情况呢?
首先要知道ssh会根据~/.ssh/config配置文件决定哪个host用哪个密钥文件,安装GitHub桌面版后,会自动修改SSH的配置文件~/.ssh/config中的”IdentityFile”为github_rsa,从而导致使用Git Bash命令行push代码时出现Permission denied (publickey)错误,但通过GitHub桌面提交代码没有问题。

解决

  1. 把GitHub for Windows桌面版自动生成的~/.ssh/github_rsa~/.ssh/github_rsa.删除
  2. 使用ssh-keygen命令生成自己的私钥id_rsa和公钥id_rsa.pub
  3. 把公钥id_rsa.pub内容添加到GitHub
  4. 修改~/.ssh/config配置文件,指定github.com使用id_rsa密钥
    Host github.com *.github.com
     IdentityFile ~/.ssh/id_rsa
    

GitHub for Windows桌面版密钥问题

目前的GitHub Windows桌面版已经不需要手动生成和上传ssh keys,系统会自动生成,也在目录~/.ssh下,私钥和公钥分别为github_rsa和github_rsa.pub,并且会自动将公钥上传到GitHub网站。
注意:安装GitHub桌面版后,会自动修改SSH的配置文件~/.ssh/config中的”IdentityFile”为github_rsa,从而导致使用Git Bash命令行push代码时出现Permission denied (publickey)错误,但通过GitHub桌面提交代码没有问题。
建议:还是不要装GitHub桌面版了,这个问题困扰我好几天,还是用命令行好,自己ssh-keygen生成密钥,手动添加到GitHub。


参考


代理环境下使用ssh连接git远程仓库

代理环境下需要给ssh配置http代理
安装msysgit后,打开Git Bash,新建~/.ssh/config用户ssh配置文件(如果没有的话),配置如下:

Host github.com *.github.com
    ProxyCommand connect -H 172.17.18.80:8080 %h %p   #设置代理
    IdentityFile ~/.ssh/github_rsa

注意:必须设置IdentityFile项,否则提示Permission denied (publickey).

ProxyCommand命令格式
ProxyCommand connect 代理服务器地址 端口 %h %p
其中connect是个程序,Windows用户下载安装了msysgit,里面有这个程序。
或者
ProxyCommand corkscrew 代理服务器地址 端口 %h %p
需要corkscrew这个软件。如果使用corkscrew,那么下载后解压缩,把corkscrew.exe和cygwin1.dll拷贝到msysgit的bin目录中。
其中%h表示目标地址,%p是目标端口。这句可以用在命令行里。

测试ssh,输入命令:
$ ssh -T git@github.com
如果返回结果:Hi username! You’ve successfully authenticated, but GitHub does not provide shell access.说明成功


代理环境下使用GitHub桌面版

问题
公司所有网络连接都需要通过代理进行,已经设置了IE系统代理,大部分软件都会自动使用系统代理。
GitHub Windows桌面版的安装程序可成功下载安装包,看来是使用了系统代理,安装并打开桌面客户端后,登录自己账号,能读取到自己的repository列表,但clone时会出错。

解决方法
GitHub官方给出了一个解决方法:
http://www.lmxm.net/git/2012/05/21/github-behind-isa-proxy.html

第一步,使用Cntlm屏蔽NTLM代理验证
首先,如果你的网络代理使用的是需要用户名密码的NTLM验证,先安装Cntlm,建立一个无须身份验证的普通HTTP代理,因为目前版本的GIT不支持NTLM验证的代理,不先借助Cntlm屏蔽掉NTLM验证,后续的任何工作都是无意义的。
关于Cntlm的安装和配置请参考:http://blog.csdn.net/bluishglc/article/details/37600773
Cntlm下载地址:https://sourceforge.net/projects/cntlm/

第二步,在.gitconfig文件中配置代理
.gitconfig文件位于C:\Users\usernameC:\Documents and Settings目录中,比如我win7系统是C:\Users\{username}\.gitconfig,打开此文件,在最后加入公司的代理配置:

[http]
    proxy = http://172.17.18.80:8080

在HTTPS端口上使用SSH

问题
安装配置好Cntlm,参看前面的文章进行配置,我们就可以在Github上检入检出https://描述的repository了,如果你尝试使用git://或git@github.com格式的地址访问,则在某些代理环境下可能会报出如下错误:
HTTP/1.1 502 Proxy Error ( The specified Secure Sockets Layer (SSL) port is not allowed. Forefront TMG is not configured to allow SSL requests from this port. Most Web browsers use port 443 for SSL requests. )
引起这一问题的原因是git://使用的9418端口以及基于SSH的git@github.com格式的地址使用的22端口在你的网络环境里(特别是代理服务端)被防火墙屏蔽了。这是极为常见的,大多数的代理环境基于安全考虑,会屏蔽除80(http)和443(https)之外的端口。那这是否意味着我们就不能在这种网络环境里使用git://或git@github.com格式的地址呢?请继续看下文。

在HTTPS端口上使用SSH(Using SSH over the HTTPS port)
虽然可以在Github上使用HTTPS协议push代码(使用的是用户名在Github上的用户名和密码),但通常来说,使用SSH检出和提交代码是更为安全,更适合团队开发,那么怎么解决前文提到的问题呢?对此,Github通过将ssh的连接端口指定为https使用的443,使用了另外一个主机名:ssh.github.com来解决这一问题,这样我们可以通过大多数代理服务器允许的443端口,使用SSH访问Github了,这一点在前面参考文章中提到的config文件里也配置过了,就是Host为ssh.github.com的部分,关于这部分的说明和配置,Github的官方帮助文档也有说明:https://help.github.com/articles/using-ssh-over-the-https-port

测试本地网络环境是否支持在HTTPS端口上使用SSH
打开GitHub Shell 输入以下命令:
$ ssh -T -p 443 git@ssh.github.com
如果返回结果:Hi username! You’ve successfully authenticated, but GitHub does not provide shell access.说明本地网络环境支持在HTTPS端口上使用SSH

修改SSH配置文件指定默认使用443端口
如果经过上一步测试可通过443端口连接GitHub,可以修改ssh配置文件做映射,以后不用每次都在命令中输入端口了
ssh配置文件位于~/.ssh/config
增加如下配置:

Host github.com
  Hostname ssh.github.com
  Port 443

保存后用$ ssh -T git@github.com测试是否成功


参考


上一篇 XML

下一篇 2016年第一季度运动记录

阅读
2,595
阅读预计11分钟
创建日期 2016-01-13
修改日期 2017-12-27
类别
百度推荐