如何通过苛刻的代理使用GitHub?

时间:2009-06-24 18:28:19

标签: git github

考虑到以下限制,我如何使用Windows和Unix中的GitHub?

  • 所有互联网访问仅限于代理
  • 代理仅允许端口80和443上的连接
  • CONNECT方法仅适用于443
  • 需要代理身份验证(NTLM或Basic)

3 个答案:

答案 0 :(得分:22)

请参阅Jeff Tchang的“Using Github Through Draconian Proxies (Windows And Unix)”(以前可从another location获得),其中包括Windows和Unix平台的说明,总结如下。

的Unix

  1. 下载Git。
  2. 下载并安装corkscrew
  3. 编辑或创建文件~/.ssh/config并输入以下内容:

    ProxyCommand /usr/bin/corkscrew proxy.example.com 443 %h %p ~/.ssh/myauth
    
    Host github.com
    User git
    Port 22
    Hostname github.com
    IdentityFile "/media/truecrypt1/Keys/GitHubKey.private"
    TCPKeepAlive yes
    IdentitiesOnly yes
    
    Host ssh.github.com
    User git
    Port 443
    Hostname ssh.github.com
    IdentityFile "/media/truecrypt1/Keys/GitHubKey.private"
    TCPKeepAlive yes
    IdentitiesOnly yes
    
  4. 如果一切设置正确,您应该可以运行ssh github.com并查看

      

    嗨用户!您已成功通过身份验证,但GitHub不提供shell访问权限   与github.com的连接已关闭。

    如果这不起作用,您可以运行ssh ssh.github.com并获得完全相同的内容。如果第一个命令不起作用,则意味着您正在使用阻止端口22上的CONNECT的代理。几乎没有代理阻止端口443上的CONNECT,因为您需要SSL。

    1. 下载msysgit。一些设置:
      • “从Windows命令提示符运行Git”
      • “使用OpenSSH”(这个非常重要)
      • 选择您的行结尾
    2. 下载connect.c。这个工具值得拥有自己的帖子,主要是因为它非常简单。它反映了开源工具开瓶器,用于通过代理进行隧道传输。是的,工具的名称实际上称为“connect.c”。对于Windows用户,可以使用预编译的二进制文件。我将connect.exe放入C:\Windows\connect.exe
    3. 决定是否要使用Windows cmd.exe来执行操作或使用Cygwin样式的shell。或两者兼而有之。
    4. 设置Cygwin Git bash shell。

      对于Cygwin样式shell,启动Git图标并编辑文件~/.ssh/config,并确保文件没有扩展名。将以下内容放在该文件中,并注意如何指定路径。

      ProxyCommand /c/windows/connect.exe -H username@proxy.example.com:443 %h %p
      
      Host github.com
      User git
      Port 22
      Hostname github.com
      IdentityFile "/c/Keys/GitHubKey.private"
      TCPKeepAlive yes
      IdentitiesOnly yes
      
      Host ssh.github.com
      User git
      Port 443
      Hostname ssh.github.com
      IdentityFile "/c/Keys/GitHubKey.private"
      TCPKeepAlive yes
      IdentitiesOnly yes
      
    5. 设置Windows cmd.exe shell。

      假设您不喜欢Git Bash shell。您更喜欢cmd.exe解释器。

      • 转到C:\Documents and Settings\.ssh\config
      • 的配置文件
      • 制作副本或制作新副本。我打电话给我config-windows

      将以下内容放入文件中,再次注意路径分隔符和样式。

      ProxyCommand C:/Windows/connect.exe -H username@proxy.example.com:443 %h %p
      
      Host github.com
      User git
      Port 22
      Hostname github.com
      IdentityFile "C:\Keys\GitHubKey.private"
      TCPKeepAlive yes
      IdentitiesOnly yes
      
      Host ssh.github.com
      User git
      Port 443
      Hostname ssh.github.com
      IdentityFile "C:\Keys\GitHubKey.private"
      TCPKeepAlive yes
      IdentitiesOnly yes
      
    6. 有关详细信息,请参阅the full blog post

答案 1 :(得分:4)

[由于我在上面给出的第一个答案的补充未在四天内获得批准,我把它放在这里。]

请注意,corkscrewconnect以及标准Unix命令nc仅支持基本身份验证(不安全地传输密码)。
tunnel-auth version 0.04另外支持摘要式身份验证。

如果您的代理需要NTLM身份验证,所有这些命令可以与cntlm很好地结合使用,如下所示:

选择cntlm将侦听的本地端口(例如,如下例所示的8080) (使用代理执行用户身份验证并转发任何内容 进一步发往/来自代理的包,设置端口等(例如,在 /etc/cntlm.conf),而不是使用上面给出的ProxyCommand(插入相应的端口号):

  

ProxyCommand corkscrew 127.0.0.1 8080%h%p

  

ProxyCommand connect -H 127.0.0.1:8080% h%p

  

ProxyCommand nc -X connect -x 127.0.0.1:8080% h%p

  

ProxyCommand tunnel-auth -p 127.0.0.1:8080 -r%h:%p

答案 2 :(得分:1)

我的情景与Jeff Tchang的情况略有不同(但基于他的帖子)但在这里可能会有所帮助。

我们所有的工作场所/企业互联网访问都是通过非身份验证代理。我能够从克隆,但不能将推送到 github:running

git push -u origin master

将返回

ssh: connect to host github.com port 22: Operation timed out
fatal: The remote end hung up unexpectedly

基于http://returnbooleantrue.blogspot.com/2009/06/using-github-through-draconian-proxies.htmlhttp://meinit.nl/ssh-through-a-proxy-from-your-apple-mac-os-x以及http://www.mtu.net/~engstrom/ssh-proxy.php我可以下载/安装corkscrew并将以下内容添加到我的〜/ .ssh / config中:

Host github.com
  User git
  Port 22
  Hostname github.com
  TCPKeepAlive yes
  IdentitiesOnly yes
  ProxyCommand /usr/local/bin/corkscrew proxy.<my-workplace>.com 8080 %h %p 

需要注意的一些要点:

  • 我还使用我的工作场所/公司私钥和GitHub:如果不这样做,则需要添加“IdentityFile”行

  • 与Jeff Tchang不同(感谢mtu.net)我不需要在ProxyCommand行的末尾加上“〜/ .ssh / myauth”

  • 我不需要设置ssh.github.com主机部分。

希望这些帮助。