Подтвердить что ты не робот

Как использовать GitHub через суровые прокси?

Учитывая следующие ограничения, как я могу использовать GitHub из Windows и Unix?

  • Весь доступ к Интернету ограничен прокси-сервером
  • Прокси-сервер разрешает только соединения на портах 80 и 443
  • Метод CONNECT разрешен только для 443
  • Требуется прокси-аутентификация (NTLM или Basic)
4b9b3361

Ответ 1

См. "Использование Github через Draconian Proxies (Windows и Unix)" Джеффом Чангом (ранее доступным из другое местоположение), которое включает инструкции для платформ Windows и Unix, которые приведены ниже.

Unix

  • Загрузите Git.
  • Загрузите и установите corkscrew.
  • Отредактируйте или создайте файл ~/.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 и получить то же самое. Если первая команда не работает, это означает, что вы используете прокси-сервер, который блокирует CONNECT на порту 22. Почти никакие прокси блокируют CONNECT на порту 443, потому что вам нужно это для SSL.

Окна

  • Загрузите msysgit. Некоторые настройки:
    • "Запустите Git из командной строки Windows"
    • "Использовать 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 [email protected]: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 [email protected]: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
    

Подробнее см. полное сообщение в блоге.

Ответ 2

[Поскольку мое дополнение к первому ответу, приведенному выше, не получило одобрения в течение четырех дней, я разместил его здесь.]

Обратите внимание, что corkscrew и connect, а также стандартная команда Unix nc поддерживают только базовую аутентификацию (которая неслучайно передает пароль).
tunnel-auth версия 0.04 дополнительно поддерживает дайджест-аутентификацию.

Если ваш прокси требует аутентификации NTLM, все эти команды могут быть очень хорошо скомбинированы с cntlm следующим образом:

Выберите локальный порт (например, 8080, как в примерах ниже), на котором cntlm будет прослушивать (выполнение аутентификации пользователя с помощью прокси-сервера и пересылка любых дополнительные пакеты в/из прокси-сервера), установите порт и т.д. (например, в /etc/cntlm.conf) и использовать вместо приведенного выше ProxyCommand (с соответствующим номером порта):

ProxyCommand штопор 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

Ответ 3

Мой сценарий немного отличался от Джеффа Чанга (но основывался на его должности), но может быть полезен здесь.

Все наши рабочие места/корпоративный интернет-доступ осуществляется через не аутентифицирующий прокси. Я смог клонировать, но не нажимать на 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 Я смог загрузить/установить штопор и добавить в свой файл ~/.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.

Надеюсь на эту помощь.