Git bash proxy windows

Использование git за прокси с аутентификацией

Достаточно часто я оказываютсь в ситуации, когда нужно обратиться к git-репозитарию, находясь за корпоративным файерволом, да еще и с аутентифицирующим прокси.
Бинарный протокол git закрыт наглухо, но, теоретически, есть возможность работать через http. Теоретически, потому что если прокси требует аутентификации — то git полностью отказывается с ним работать, по крайней мере под Windows.
Выход — пустить git через локальный прокси, который будет аутентифицироваться на upstream сам. Для этих целей будем использовать небезызвестный privoxy.

В примере используется допущение, что вы хотите получить доступ к github.com. Доступ будет настроен только к нему, ни к чему больше.
Еще одно допущение — ваш прокси поддерживает базовую (Basic) аутентификацию по http протоколу. Если же включена только NTLM аутентификация, то вместо privoxy потребуется установка cntlm. Этот случай мы не рассматриваем, но там все еще проще.

Шаги:

  1. Ставим себе на машину privoxy. Мой файервол запрещает доступ к privoxy.org, ваш, возможно, тоже. Качаем отсюда
  2. Ставить лучше portable версию, незачем мозолить глаза админам новыми записями в списке установленных программ.
  3. Правим config.txt, добавляем строчку
    forward github.com :
  4. В config.txt добавляем еще строчку
    debug 8 # Вывод информации о HTTP заголовках
  5. Запускаем браузер, ставим в качестве прокси localhost:8118
  6. Заходим на github.com, авторизуемся на прокси, выходим из браузера
  7. Ищем в логах privoxy строчку вида
    Jun 14 18:05:55.577 000017dc Header: scan: Proxy-Authorization: Basic gzMzAcG06T2lkb387XBsZX3gzMzAc2lkJlZG06T=
    Копируем ваш токен в сухое темное место.
  8. Добавляем в user.action строку:
    <+add-header>
    .github.com

Естественно, заменяем токен на ваш.

  • Удаляем из config.txt строку
    debug 8
  • С прокси все, осталось малое — настроить git.
    git config —global http.proxy http: //localhost:8118/
    Пробел только уберите после http:, пришлось добавить, т.к. парсер в ссылку превращает.
  • Вот и все, теперь git сможет работать через аутентифицирующий прокси. Правда, только по протоколу http.

    В качестве бонуса: вы теперь можете вообще забыть о том, что ваш прокси требует ввода пароля, если везде будете пользоваться локальным прокси, а не корпоративным.
    Все, что надо сделать — заменить в user.action строку «.github.com» на «/».

    Приятных вам коммитов!

    Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

    richjava / getiing_started_with_git_with_proxy_on_windows

    The following will get you started with git on Windows behind a proxy. You will need a web project set up on your machine and a Github account with a repository set up which you will send files (push) to.
    *************Open Git Bash*************
    If git was installed by your administrator to allow you to open git bash at a certain directory by left clicking on the directory and choosing «Git Bash Here», then skip this part and just open git bash on your project directory.
    In your file system, go to where git was installed on your computer, i.e. C:\Program Files (x86)\Git
    Right click on Git Bash > Send to > Desktop (create shortcut)
    Double click Git Bash
    *************Configure git on your system*************
    git config —global user.name «YOUR NAME»
    git config —global user.email johndoe@example.com
    Subsitute the values in the following command in angle brackets for those particular to your company/institution (if you don’t know these you may need to contact the system admin/someone who knows):
    $ git config —global http.proxy http:// \\ : @proxy. :
    *************Navigate to project************* Navigate to project (i.e. type full path or use «Insert» button on your keyboard to paste), i.e.: cd /d/Users/ /Documents/NetBeansProjects/HelloWorld ************* The following commands will initiate a local repository, add all files from your project to the repo, commit these files, add a remote origin (on Github), pull files from the remote repo (will pull README if you created one), and push files (whole project) to remote repo. ************* git init git status git add . git status git commit -m «first commit» For the below command you can copy the clone url from the Github repository’s page (use «Insert» button onj your keyboard to paste): git remote add origin https://github.com/ / .git git pull origin master git status git push -u origin master ********Confirmation************ Now go to your Github repository’s page to see if the files are in there.

    You can’t perform that action at this time.

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

    patik / .bashrc

    # configure proxy for git while on corporate network
    # From https://gist.github.com/garystafford/8196920
    function proxy_on() <
    # assumes $USERDOMAIN, $USERNAME, $USERDNSDOMAIN
    # are existing Windows system-level environment variables
    # assumes $PASSWORD, $PROXY_SERVER, $PROXY_PORT
    # are existing Windows current user-level environment variables (your user)
    # environment variables are UPPERCASE even in git bash
    export HTTP_PROXY= » http:// $USERNAME : $PASSWORD @ $PROXY_SERVER : $PROXY_PORT «
    export HTTPS_PROXY= $HTTP_PROXY
    export FTP_PROXY= $HTTP_PROXY
    export SOCKS_PROXY= $HTTP_PROXY
    export NO_PROXY= » localhost,127.0.0.1, $USERDNSDOMAIN «
    # Update git and npm to use the proxy
    git config —global http.proxy $HTTP_PROXY
    git config —system http.sslcainfo /bin/curl-ca-bundle.crt
    git config —global http.sslcainfo /bin/curl-ca-bundle.crt
    # npm config set proxy $HTTP_PROXY
    # npm config set https-proxy $HTTP_PROXY
    # npm config set strict-ssl false
    # npm config set registry «http://registry.npmjs.org/»
    # optional for debugging
    export GIT_CURL_VERBOSE=1
    # optional Self Signed SSL certs and
    # internal CA certificate in an corporate environment
    export GIT_SSL_NO_VERIFY=1
    env | grep -e _PROXY -e GIT_ | sort
    # echo -e «\nProxy-related environment variables set.»
    # clear
    >
    # Enable proxy settings immediately
    proxy_on
    # Disable proxy settings
    function proxy_off() <
    variables=( \
    » HTTP_PROXY » » HTTPS_PROXY » » FTP_PROXY » » SOCKS_PROXY » \
    » NO_PROXY » » GIT_CURL_VERBOSE » » GIT_SSL_NO_VERIFY » \
    )
    for i in » $ «
    do
    unset $i
    done
    env | grep -e _PROXY -e GIT_ | sort
    echo -e » \nProxy-related environment variables removed. «
    >

    This will automatically set the proxy variables when you launch a bash shell. At any time you can type proxy_off to disable them.

    You may need to hardcode your password, proxy server, and proxy port on line 11. Just replace each $VAR_NAME with the actual value.

    Put this file in your home directory. Make sure the file is called .bashrc with nothing before the dot — if you’re on Windows, try saving it from a decent text editor like Sublime Text or Notepad++ as Explorer will not let you name a file in this way.

    1234ru / git-bash-win.md

    Далее будет рассмотрена работа с portable-версией.

    В пакете присутствует не только сам git, но и средства для работы в командной строке, которые позволяют сделать рабочий процесс практически полностью идентичным таковому в Unix-системах. (При этом, в отличие от подсистемы Windows for Linux, нет ни необходимости устанавливать дополнительные компоненты ОС, ни жёстких требований к новизне версии Windows).

    В первую очередь, это оболочка bash , которая поддерживает цвета и комбинации клавиш, а также сопутствующие программы из числа наиболее часто используемых в Linux ( ls , grep , curl , vim , ssh (!) и пр.) делают возможными многие привычные операции.

    Для настройки bash (например, вида системного приглашения) используется стандартный файл .bashrc , который нужно разместить в домашнем каталоге пользователя ( C:/Users/пользователь ).

    В первую очередь, необходимо указать работу в кодировке UTF-8:

    (Кодировку также нужно будет указать самому терминалу — см. ниже).

    Также наверняка захочется настроить вид системного приглашения (текущее можно посмотреть, дав команду echo $PS1 ):

    Перечитать конфигурационный файл без перезапуска терминала можно командой .

    Пути файловой системы

    Все пути начинаются с / (как в Unix-системах). Путь вида C:/somedir отображается в виде /c/somdeir . Можно использовать и в оригинале ( C:/. ), но с ним не будет работать достройка путей по Tab .

    , указывающее на домашний каталог пользователя.

    Имена системных переменных нужно писать, начиная с $ , а не обрамляя % : echo $PATH , а не echo %PATH .

    При прямом запуске из командной строки bash стартует в стандартной консоли Windows cmd , которая работает в кодировке CP866 . Чтобы консоль работала в UTF-8, перед запуском bash нужно дать команду CHCP 65001 .

    Автоматизировать этот процесс можно так:

    1. Создать рядом с bash.exe файл b.bat (короткое имя — для быстрого запуска):
    1. Запускать bat-файл из диалога Run: Win+R; b; Enter .

    В результате будет получен полностью готовый к работе терминал с командной оболочкой bash.

    Редактор vi (а точнее, vim ) используется как стандартный редактор при написании commit-сообщений git . Для корректной работы с кириллическим текстом в настройках запуска vim нужно явно указать кодировку UTF-8. Это делается в файле .vimrc , который нужно поместить в домашний каталог пользователя (по аналогии с *nix-системами):

    Предварительно терминалу Windows обязательно должна быть установлена кодовая страница 65001 (см. предыдущий пункт), иначе редактор будет работать некорректно.

    Глобальные настройки на уровне пользователя ОС git хранит в файле .gitconfig в домашнем каталоге пользователя так же, как в Linux. Можно сразу скопировать этот файл с какого-нибудь рабочего сервера и исправить в нем нужные места, вместо того, чтобы давать набор команд git config —global .

    Как правило, необходимо указать имя и email:

    Без этого git не даст отправлять изменения в удаленные репозитории ( git push ).

    Чтобы получать и отправлять изменения в удалённые репозитории без ввода пароля, git должен иметь возможность пользоваться ssh-ключом. У самого git нет настроек, позволяющих явно указывать ключ — в этом он всецело полагается на команду ssh .

    Самый простой путь задействовать свой приватный ключ — скопировать его openssh-версию в файл

    /.ssh/id_rsa (снова точно так же, как в Linux). Он будет использоваться не только при работе git, но и при использовании команды ssh для соединения к удаленным сервером напрямую (которую можно использовать как альтернативу putty).

    Такой подход предполагает, что для всех соединений будет использоваться один и тот же ключ.

    Если для разных хостов нужны разные ключи, потребуется более детальная настройка ssh . Подробнее см. https://stackoverflow.com/a/25924462.

    Странности (то, что работает не так, как в Linux)

    Using Git on Windows, behind an HTTP proxy, without storing proxy password on disk

    I’m using Git on Windows, on a corporate network where I’m behind an HTTP proxy with Basic authentication. Outbound SSH doesn’t work, so I have to use HTTPS through the proxy.

    I’m aware of how to use git config http.proxy to configure the settings as http://[username]:[password]@[proxy]:[port] .

    However, particularly as this is a shared machine, I’d rather not store my password in my .gitconfig . Additionally, changing my .gitconfig using the git config command leaves my password in my bash history, so even if I remember to clear my .gitconfig at the end of the session, I’ll almost certainly forget to clear my history as well.

    I’ve tried setting http.proxy without a password, in the vain hope that I’d get a prompt asking me for my password when I try to push/pull, but I only get a 407 Proxy Authentication Required. All the information I’ve found online seems to either ignore the issues with having the password saved in plaintext in .gitconfig , or deals with NTLM proxies.

    I’m quite happy to type my proxy details every time I need to connect — the best solution I can see at the moment is writing a wrapper script that will prompt for my password and set that as an environment variable when calling git proper. Is this a decent solution, and are there any security implications to setting an environment variable for a single call in a script? Preferably, are there any built-in settings or existing tools that I can use for this?

    Читайте также:  Лучший дистрибутив linux для слабых ноутбуков
    Оцените статью