Как ввести пароль для git push из скрипта без использования ключей SSH? - PullRequest
7 голосов
/ 20 мая 2011

Мне нужно написать скрипт, который может переместить тег с сервера сборки на git-сервер БЕЗ ИСПОЛЬЗОВАНИЯ SSH-КЛЮЧЕЙ.

Больше людей имеют доступ к серверу сборки, чем к git-серверу, поэтому ключи SSHне будет работать, потому что тогда любой может нажать на git-сервер без указания своих учетных данных.

Сценарий будет запущен из Jenkins / Hudson, который запрашивает у пользователя имя пользователя и пароль при начале сборки,затем передает их как переменные среды в скрипт.

Проблема в том, что я не могу найти способ заставить git принять пароль программно.

Я пытался:

echo %password% | git push

, а также

git push < tempfilewithpassword.txt (not that writing the password to a temp file is a good idea anyway).

Но в обоих случаях git по-прежнему запрашивает пароль.

ОБНОВЛЕНИЕ: Я также пробовал скрипт на python, перенаправляя stdin и stdout, но, к счастью, все ещеполучить приглашение.

ОБНОВЛЕНИЕ: Кроме того, я попробовал Expect for Windows, которая НЕ получает приглашение ни в консоли, ни в самом Expect (IE Expect никогда не видит никаких выходных данных).от git, это просто время ожидания).

Есть предложения?

ПРИМЕЧАНИЕ: Позвольте мне уточнить, потому что люди действительно зацикливаются на использовании ключей SSH.

Требования:

  • Учетные данные должны быть указаны в начале сборки (Дженкинс принимает их и передает их моему сценарию).
  • Учетные данные сохраняются ТОЛЬКО на протяжении этого синглаbuild.
  • Учетные данные могут меняться от одной сборки к следующей.

Насколько я знаю, НИЧЕГО, что связано с настройкой ключей SSH, это не удовлетворит (если только я не требую пользователязагружать свой ключ SSH при запуске сценария, что не удобно).

1 Ответ

1 голос
/ 20 мая 2011

Если вы не хотите, чтобы кто-либо имел принудительный доступ к вашему git-репозиторию, создайте отдельного пользователя на сервере сборки, к которому никто, кроме вас, не имеет доступа, и убедитесь, что его домашний каталог доступен для чтения только вам. Этот пользователь будет использоваться, когда вы захотите сделать пометки или другие добавления в ваш репозиторий из скрипта. Теперь вы можете настроить ssh-ключи как обычно.

Однако мне интересно, почему это должен быть сервер сборки, который запускает push / pull? Не может ли скрипт на компьютере, который содержит ваш репозиторий, инициировать его? Тогда весь вопрос будет спорным, конечно?

...