Cygwin / Git Причудливая Проблема Терминала

ладно, это странно. Во-первых, это mintty работает на актуальном cygwin, с git вытащил из установки cygwin.исполняемый. Я использую ЗШ.

$ git clone https://<user>@<domain>/<repository>/ ~/src/project/dev
Initialized empty Git repository in /cygdrive/c/src/project/dev/.git/
Password: <actual password in plain text appears>
# Nothing happens...
^C
$ <password text that I just typed>
zsh: command not found: <same password text>

что здесь происходит? Это проблема терминала, а проблема консоли, а проблема ЖКТ или проблемы с Cygwin?

обновление: Да, я запускаю версию Cygwin git, а не версию Windows:

$ which git
/usr/bin/git
$ git --version
git version 1.7.1
$ /cygdrive/c/Program Files (x86)/Git/bin/git.exe --version
git version 1.7.0.2.msysgit.0
28
задан emptyset
24.12.2022 2:16 Количество просмотров материала 3008
Распечатать страницу

10 ответов

хорошо, я думаю, что нашел определенное решение.

проблема в том, что независимо от используемого терминала (puttycyg, mintty, cmd.exe), Git по умолчанию, при отсутствии лучше настроенных альтернатив, пытается использовать "простой запрос пароля" (как вы можете прочитать в описании core.askpass настройки).

простой запрос пароля, по-видимому, работает только на реальном UNIX, но не на Cygwin.

решение установить SSH_ASKPASS совместимые программы для Windows и настроить Git, чтобы использовать его.

что я сделал:

  1. установить win-ssh-askpass применение распаковки и копирования в C:\
  2. скачать и установить инсталлятор 5 время выполнения, требуемых выиграть-по SSH-askpass (трудно найти в наше время, но нашла кого-то http://www.satsignal.eu/software/runtime.html)
  3. настройка Git для получения паролей с помощью win-ssh-askpass:git config --global core.askpass "C:/win_ssh_askpass.exe". Отмечать что EXE файл имеет подчеркивания своего имени, а не минус.
  4. не забудьте всегда поместите свой логин в URL (https://<user>@<domain>/<repository>). В противном случае Git запросит логин перед запросом пароля, используя ту же утилиту askpass. Вы можете неосознанно ввести свой пароль в качестве логина, который будет отправлен на веб-сервер и вошел в свой журнал доступа в виде обычного текста!

Теперь Git запрашивает пароль, используя элегантное окно GUI и работает независимо от используемого терминала:)

8
отвечен Aleksander Adamowski 2022-12-25 10:04

я испытал ту же проблему - однако в моем случае я SSH'D на сервере Cygwin так очевидно Win32 GUI askpass не будет работать.

вместо этого я написал этот простой скрипт для askpass. Я, хотя он может быть использован из регулярных приглашений, а также путем получения устройства tty от /bin/tty.exe но это не сработало по неизвестной причине (не стесняйтесь сами tty или искать другое решение, чтобы получить tty, может быть, я просто ошибся как-то.)

/bin/askpass.sh:

#!/bin/bash

TTY=$SSH_TTY
[ -c "$TTY" -a -r "$TTY" -a -w "$TTY" ] \
  || { echo "Failed to open device \`$TTY'!"; exit 1; }
exec <$TTY

echo -n "$@" >$TTY
read -s P
echo >$TTY

echo $P

убедитесь, что этот сценарий является исполняемым и использовать его в качестве ядра вашего git.установка askpass. Поскольку этот скрипт использует переменную $SSH_TTY, он обычно работает только с SSH. Однако вы можете установить $SSH_TTY в .bashrc или .bash_profile в противном случае; таким образом он должен работать даже с консоли. Следующая строка в вашем rc скрипте должна сделать это:

[ -z "$SSH_TTY" ] && export SSH_TTY=$(/bin/tty.exe)
7
отвечен Thomas Guyot-Sionnest 2022-12-25 12:21

выше решения не работают для меня, но я нашел еще один.

вы должны запустить ssh agent

просто добавить в ~/.bashrc и перезапустить консоль

SSH_ENV=$HOME/.ssh/environment



# start the ssh-agent

function start_agent {

    echo "Initializing new SSH agent..."

    # spawn ssh-agent

    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"

    echo succeeded

    chmod 600 "${SSH_ENV}"

    . "${SSH_ENV}" > /dev/null

    /usr/bin/ssh-add

}



if [ -f "${SSH_ENV}" ]; then

     . "${SSH_ENV}" > /dev/null

     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {

        start_agent;

    }

else

    start_agent;

fi

P.S. Chrome и Opera используют linebreak, который несовместим с bash - просто используйте другой браузер для copy paste

2
отвечен Aloy 2022-12-25 14:38

возможно, у вас есть метасимвол, например &, в URL. Это приведет к тому, что git будет работать в фоновом режиме, а в системе Unix он будет остановлен, как только он попытается прочитать из stdin. A ; также завершит выполнение команды частично через строку и Ctrl-C приведет к прерыванию остальной части строки (отдельная команда).

интересно, что git инициализирует репозиторий в /cygdrive/c/src/project/dev/.git/ хотя вы сказали использовать ~/src/project/dev (если вы имейте свой домашний каталог в странном месте). Это предполагает, что git команда не видит остальную часть командной строки, которая является то, что произойдет, если бы был бродячий & или ; в URL.

(у меня была эта проблема много раз с wget, хотя с git.)

попробовать git clone из другого репозитория или с использованием другого транспорта из того же репозитория, чтобы увидеть, если git перепутались вообще или просто для этого РЕПО. Вы можно также попытаться заключить URL-адрес в одинарные кавычки.

1
отвечен Neil Mayhew 2022-12-25 16:55

взгляните на следующую проблему-я вполне уверен, что теперь это просто ограничение мяты и совместимости с Windows.

выпуск 56 - mintty

У меня также были проблемы с запуском mysql и т. д. Из mintty - так что ответ заключается в том, что это проблема эмуляции терминала.

1
отвечен emptyset 2022-12-25 19:12

на вопрос уже был дан ответ... Я просто хотел бы добавить, как я исправил:

Проверка Windows Git Bash, я мог видеть, что git установлено следующее SSH_ASKPASS

$ echo $SSH_ASKPASS
/mingw64/libexec/git-core/git-gui--askpass

Итак, на Cygwin я добавил ту же переменную в .bashrc

# Unconditionally export SSH_ASKPASS
export SSH_ASKPASS="/mingw64/libexec/git-core/git-gui--askpass"

или

# export SSH_ASKPASS only if git is installed
hash git 2>/dev/null && export SSH_ASKPASS="/mingw64/libexec/git-core/git-gui--askpass"

делая это, git открывает SSH_ASKPASS из Git... Мне не нужно было устанавливать какой-либо дополнительный SW или создавать какой-либо дополнительный скрипт.

надеюсь, что это может помочь!

1
отвечен W0rmH0le 2022-12-25 21:29

лет назад у меня были некоторые проблемы с аутентификацией CVS Cygwin... это было связано с тем, установили ли вы Cygwin с окончаниями строк в стиле DOS или Unix (CRLF vs just LF); это один из вариантов в диалоговом окне установки. Если вы выбрали неправильный (я думаю, что DOS был тот, который работал), пароль будет в конечном итоге искажен или с ложным символом или чем-то еще.

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

0
отвечен timday 2022-12-25 23:46

у меня та же проблема, и, вопреки этому нить, проблема возникает с Cygwin GIT во всех возможных терминалах -puttycyg,mintty и классические окна cmd.exe.

Я все еще ищу правильное решение, но есть обходной путь - хотя это очень небезопасно, вы можете попробовать поместить пароль в URL репозитория, например:

git clone https://<user>:<password>@<domain>/<repository>/

работает ли обходной путь для вас?

0
отвечен Aleksander Adamowski 2022-12-26 02:03

если это репозиторий, который вы часто используете, проще всего создать~/.netrc файл с

machine git.example.com
login yourlogin
password your password

очевидно, вы должны установить соответствующие драконовские разрешения на файл.

0
отвечен Carson Chittom 2022-12-26 04:20

просто уточнение комментарий #2

есть Cygwin ssh-ask-pass (неофициальный)здесь

просто загрузите tar.bz2 и распакуйте в папку cygwin. Он работает без установки Borland delphi runtime.

0
отвечен Raghu 2022-12-26 06:37

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх