Como faço para usar o GitHub através de proxies duras?
Pergunta
Dadas as seguintes restrições, como eu posso usar GitHub a partir do Windows e Unix?
- Todo o acesso à internet é restrito a um proxy
- O proxy só permite conexões de fora na porta 80 e 443
- método CONNECT só é habilitado para 443
- Autenticação de proxy é necessária (NTLM ou Basic)
Solução
Veja uma “Usando Github Através Draconian Proxies (Windows e UNIX)” por Jeff Tchang (anteriormente disponível a partir de outro local ), que inclui instruções para ambas as plataformas Windows e Unix, resumidos a seguir.
Unix
- Baixar Git.
- Baixe e instale saca-rolhas .
-
Editar ou criar o
~/.ssh/config
arquivo e coloque o seguinte: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
-
Se tudo estiver configurado corretamente, você deve ser capaz de executar
ssh github.com
e vejauser Hi! Você autenticado com êxito, mas não GitHub não fornece acesso shell.
Conexão com github.com fechada.Se isto não funcionar, você pode executar
ssh ssh.github.com
e obter exatamente a mesma coisa. Se o primeiro comando não funcionou significa que você está usando um proxy que bloqueia CONNECT na porta 22. Quase sem proxies bloquear CONNECT na porta 443 porque você precisa disso para SSL.
Windows
- msysgit . Algumas definições:
- “Run Git do comando do Windows Prompt”
- “Use OpenSSH” (este é muito importante)
- Escolha o seu final de linha
- connect.c . Esta ferramenta merece o seu próprio posto principalmente por causa de sua extrema simplicidade. Ele reflete o saca-rolhas ferramenta de código aberto e é usado para tunelamento através de proxies. Sim o nome da ferramenta é realmente chamado “connect.c.” Para usuários do Windows, um binário pré-compilado está disponível. Eu coloquei minha
connect.exe
emC:\Windows\connect.exe
. - Decida se você gosta de usar o
cmd.exe
Windows para fazer coisas ou o shell estilo Cygwin. Ou ambos. -
configurar o shell bash Cygwin Git.
Para o shell estilo Cygwin iniciar-se o ícone Git e editar o
~/.ssh/config
arquivo e verifique se o arquivo não tem extensão. Coloque o seguinte no arquivo, e observe como os caminhos são especificados.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
-
configurar o shell
cmd.exe
do Windows.Suponha que você não faz como o shell Git Bash. Você prefere o intérprete cmd.exe.
- Vá para o seu arquivo de configuração no
C:\Documents and Settings\.ssh\config
- Faça uma cópia do mesmo ou fazer um novo. Eu chamei o meu
config-windows
Coloque o seguinte no arquivo, novamente prestando muita atenção separadores e estilos de caminho.
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
- Vá para o seu arquivo de configuração no
Para mais detalhes, consulte o blog completo pós .
Outras dicas
[Desde a minha além de a primeira resposta dada acima não obter aprovação dentro de quatro dias, eu colocá-lo aqui.]
Note que corkscrew
e connect
, bem como o comando nc
Unix padrão suportam apenas a autenticação básica (que insegura transmite a senha).
versão tunnel-auth
0,04 em suportes de adição de autenticação Digest.
No caso do seu proxy requer autenticação NTLM, todos estes comandos podem ser combinados muito bem com cntlm
da seguinte forma:
Escolha uma porta local (por exemplo, 8080, como nos exemplos abaixo) em que cntlm
vai ouvir
(Realizando a autenticação do utilizador com o proxy e encaminhar qualquer
mais pacotes de / para o proxy), definir a porta, etc. (por exemplo, em
/etc/cntlm.conf
), e da utilização, em vez do ProxyCommand dado acima (com o respectivo número de porta inserido):
ProxyCommand saca-rolhas 127.0.0.1 8080% h% p
ou
ProxyCommand connect -H 127.0.0.1:8080% h% p
ou
ProxyCommand nc -X connect -x 127.0.0.1:8080% h% p
ou
ProxyCommand túnel-auth -p 127.0.0.1:8080 -r% h:% p
Meu cenário foi um pouco diferente para Jeff Tchang do (mas baseado em seu post), mas pode ser útil aqui.
Todo o nosso acesso à Internet no local de trabalho / corporativa é através de um proxy não-autenticação. Eu era capaz de clone de , mas não empurrar para github: correr
git push -u origin master
voltaria
ssh: connect to host github.com port 22: Operation timed out
fatal: The remote end hung up unexpectedly
Com base http: //returnbooleantrue.blogspot. com / 2009/06 / utilizando-github-through-draconiana-proxies.html e http://meinit.nl/ssh-through-a-proxy-from-your-apple-mac-os-x e http://www.mtu.net/~engstrom/ssh-proxy.php eu era capaz de baixar / instalar o saca-rolhas e adicione o seguinte ao meu ~ / .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
Alguns pontos a nota:
-
Eu uso o meu local de trabalho chave / corporativo privado também com GitHub: se você não você vai precisar adicionar uma linha "IdentityFile"
-
Ao contrário com Jeff Tchang (e graças a mtu.net) Eu não precisam ter o "~ / .ssh / MyAuth" no final da linha ProxyCommand
-
Eu não preciso configurar uma seção ssh.github.com anfitrião.
Hope estes ajuda.