Come posso usare GitHub attraverso proxy aggressivi?
Domanda
Dati i seguenti vincoli, come posso usare GitHub da Windows e Unix?
- Tutti gli accessi a Internet sono limitati a un proxy
- Il proxy consente solo connessioni in uscita sulla porta 80 e 443
- Il metodo CONNECT è abilitato solo per 443
- È richiesta l'autenticazione proxy (NTLM o Basic)
Soluzione
Guarda un & # 8220; Utilizzo di Github Through Draconian Proxies (Windows And Unix) & # 8221; di Jeff Tchang (precedentemente disponibile da un'altra posizione ), che include istruzioni per piattaforme Windows e Unix, riepilogate di seguito.
Unix
- Scarica Git.
- Scarica e installa cavatappi .
-
Modifica o crea il file
~ / .ssh / config
e inserisci quanto segue: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 tutto è configurato correttamente dovresti essere in grado di eseguire
ssh github.com
e vedereCiao utente! Sei stato autenticato con successo, ma GitHub non fornisce l'accesso alla shell.
Connessione a github.com chiusa.Se non funziona, puoi eseguire
ssh ssh.github.com
e ottenere esattamente la stessa cosa. Se il primo comando non ha funzionato significa che stai utilizzando un proxy che blocca CONNECT sulla porta 22. Quasi nessun proxy blocca CONNECT sulla porta 443 perché ne hai bisogno per SSL.
di Windows
- Scarica msysgit . Alcune impostazioni:
- & # 8220; Esegui Git dal prompt dei comandi di Windows & # 8221;
- & # 8220; Usa OpenSSH & # 8221; (questo è molto importante)
- Scegli le terminazioni di riga
- Scarica connect.c . Questo strumento merita il proprio post principalmente per la sua assoluta semplicità. Rispecchia il cavatappi dello strumento open source e viene utilizzato per il tunneling attraverso i proxy. Sì, il nome dello strumento è davvero chiamato & # 8220; connect.c. & # 8221; Per gli utenti Windows è disponibile un file binario precompilato. Ho inserito il mio
connect.exe
inC: \ Windows \ connect.exe
. - Decidi se vuoi usare il
cmd.exe
di Windows per fare cose o la shell in stile Cygwin. O entrambi. -
Imposta la shell bash di Cygwin Git.
Per la shell in stile Cygwin, avvia l'icona Git e modifica il file
~ / .ssh / config
e assicurati che il file non abbia estensione. Inserisci quanto segue in quel file e osserva come vengono specificati i percorsi.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
-
Imposta la shell
cmd.exe
di Windows.Supponi che non ti piaccia la shell Git Bash. Preferisci l'interprete cmd.exe.
- Vai al tuo file di configurazione in
C: \ Documents and Settings \ .ssh \ config
- Creane una copia o creane una nuova. Ho chiamato il mio
config-windows
Inserisci quanto segue nel file, prestando di nuovo molta attenzione ai separatori di percorso e agli stili.
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
- Vai al tuo file di configurazione in
Per tutti i dettagli, vedi il blog completo dopo .
Altri suggerimenti
[Dato che la mia aggiunta alla prima risposta fornita sopra non è stata approvata entro quattro giorni, l'ho messa qui.]
Nota che cavatappi
e connect
, così come il comando Unix standard nc
supportano solo l'autenticazione di base (che trasmette in modo insicuro la password).
tunnel-auth
versione 0.04 supporta inoltre l'autenticazione digest .
Nel caso in cui il tuo proxy richieda l'autenticazione NTLM, tutti questi comandi possono essere combinati molto bene con cntlm
come segue:
Scegli una porta locale (ad esempio 8080 come negli esempi seguenti) su cui cntlm
ascolterà
(eseguendo l'autenticazione dell'utente con il proxy e inoltrando qualsiasi
ulteriori pacchetti da / verso il proxy), impostare la porta ecc. (ad es. in
/etc/cntlm.conf
) e utilizzare al posto del ProxyCommand indicato sopra (con il rispettivo numero di porta inserito):
Cavatappi ProxyCommand 127.0.0.1 8080% h% p
o
ProxyCommand connect -H 127.0.0.1:8080% h% p
o
ProxyCommand nc -X connect -x 127.0.0.1:8080% h% p
o
ProxyCommand tunnel-auth -p 127.0.0.1:8080 -r% h:% p
Il mio scenario era un po 'diverso da quello di Jeff Tchang (ma basato sul suo post) ma potrebbe essere utile qui.
Tutto il nostro accesso a Internet sul posto di lavoro / aziendale avviene tramite un proxy non autenticante. Sono stato in grado di clonare da ma non ho inviato a github: in esecuzione
git push -u origin master
ritornerebbe
ssh: connect to host github.com port 22: Operation timed out
fatal: The remote end hung up unexpectedly
Basato su http: //returnbooleantrue.blogspot. com / 2009/06 / using-github-through-draconian-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 sono stato in grado di scaricare / install cavatappi e aggiungi quanto segue al mio ~ / .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
Alcuni punti da notare:
-
Uso la mia chiave privata sul posto di lavoro / aziendale anche con GitHub: in caso contrario dovrai aggiungere un " IdentityFile " riga
-
A differenza di Jeff Tchang (e grazie a mtu.net) non avevo bisogno di avere " ~ / .ssh / myauth " alla fine della linea ProxyCommand
-
Non avevo bisogno di impostare una sezione Host di ssh.github.com.
Spero che questi aiuti.