厳しいプロキシを介してGitHubを使用するにはどうすればよいですか?
質問
次の制約がある場合、WindowsおよびUnixからGitHubを使用するにはどうすればよいですか
- インターネットへのすべてのアクセスはプロキシに制限されています
- プロキシは、ポート80および443での接続のみを許可します
- CONNECTメソッドは443でのみ有効です
- プロキシ認証が必要です(NTLMまたはBasic)
解決
“ Using Github Draconian Proxies(Windows And Unix)” by Jeff Tchang(以前は別の場所)、WindowsおよびUnixプラットフォームの両方の手順が含まれます。以下に要約します。
Unix
- Gitをダウンロードします。
- コークスクリューをダウンロードしてインストールします。
-
ファイル
〜/ .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
-
すべてが正しくセットアップされていれば、
ssh github.com
を実行して表示することができるはずですこんにちは!認証に成功しましたが、GitHubはシェルアクセスを提供しません。
github.comへの接続が閉じられました。これが機能しない場合は、
ssh ssh.github.com
を実行して、まったく同じものを取得できます。最初のコマンドが機能しなかった場合、ポート22でCONNECTをブロックするプロキシを使用していることを意味します。SSLに必要なため、ポート443でCONNECTをブロックするプロキシはほとんどありません。
Windows
- msysgit をダウンロードします。いくつかの設定:
- “ WindowsコマンドプロンプトからGitを実行”
- “ OpenSSHを使用” (これは非常に重要です)
- 行末を選択
- ダウンロード connect.c 。このツールは、その完全なシンプルさを主な理由として、独自の投稿に値します。これは、オープンソースツールのコルク抜きを反映し、プロキシをトンネリングするために使用されます。はい、ツールの名前は実際に“ connect.c。”と呼ばれていますWindowsユーザーの場合、事前にコンパイルされたバイナリが利用可能です。
connect.exe
をC:\ Windows \ connect.exe
に配置します。 - Windowsの
cmd.exe
を使用して作業を行うか、Cygwinスタイルのシェルを使用するかを決定します。またはその両方。 -
Cygwin Git bashシェルをセットアップします。
Cygwinスタイルのシェルの場合、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
-
Windowsの
cmd.exe
シェルをセットアップします。Git Bashシェルが気に入らないとします。 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
詳細については、ブログ全体をご覧ください。投稿。
他のヒント
[上記の最初の回答への追加が4日以内に承認されなかったので、ここに入力します。]
corkscrew
と connect
、および標準のUnixコマンド nc
は、基本認証(パスワードを安全に送信しない)のみをサポートすることに注意してください。
tunnel-auth
バージョン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
私のシナリオは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.html および http://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に感謝)、「〜/ .ssh / myauth」を取得する必要はありませんでした。 ProxyCommand行の最後に
-
ssh.github.comホストセクションを設定する必要はありませんでした。
これらのヘルプを期待してください。