Git clone через SSH в Cygwin не запрашивает пароль, вместо этого появляются ошибки - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь использовать следующую команду, чтобы выполнить клон Git через SSH с защищенного паролем безголового сервера. Я использую Cygwin с OpenSSH. Я могу сделать интерактивный SSH к серверу без проблем, используя Cygwin. Эта проблема возникает только в Cygwin, а не в командной строке Windows.

git clone ssh://username@server.edu:path/to/repo/reponame

Я не получаю никакой подсказки пароля. Я получаю следующую ошибку:

Cloning into 'reponame'...
ssh_askpass: exec(/usr/lib/ssh/ssh-askpass): No such file or directory
Permission denied, please try again.
ssh_askpass: exec(/usr/lib/ssh/ssh-askpass): No such file or directory
Permission denied, please try again.
ssh_askpass: exec(/usr/lib/ssh/ssh-askpass): No such file or directory
username@server.edu: Permission denied (publickey,password).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Я предполагаю, что это вызвано SSH и настройками Cygwin.

Неудачные "решения", которые я пробовал до сих пор:

  1. Использование команды вида

    git clone ssh: // имя пользователя: пароль@server.edu: путь / к / repo / reponame

  2. Начало

    unset GIT_ASKPASS unset SSH_ASKPASS

и повторная попытка клона.

  1. Открытие сервера x-forwarding на моей локальной машине и повторная попытка клонирования.

Решение, которое наконец-то сработало, - открыть командную строку Windows и использовать ее вместо терминала Cygwin. Какие настройки в Cygwin могли вызвать проблему и как ее исправить?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Это потому, что у вас установлена ​​переменная окружения DISPLAY в Cygwin? Со страницы руководства SSH:

 SSH_ASKPASS           If ssh needs a passphrase, it will read the
                       passphrase from the current terminal if it was run
                       from a terminal.  If ssh does not have a terminal
                       associated with it but DISPLAY and SSH_ASKPASS are
                       set, it will execute the program specified by
                       SSH_ASKPASS and open an X11 window to read the
                       passphrase.  This is particularly useful when call‐
                       ing ssh from a .xsession or related script.  (Note
                       that on some machines it may be necessary to redi‐
                       rect the input from /dev/null to make this work.)

Я только что быстро поиграл с Cygwin и Linux, и я могу воспроизвести то, что вы видите, но только если клон git работает в процессе без псевдотерминала. (Похоже, что /usr/lib/ssh/ssh-askpass является значением по умолчанию для SSH_ASKPASS, и ssh будет использовать его, даже если SSH_ASKPASS не установлено.) При этом я не могу точно воспроизвести то, что вы видите - моя командная строка Cygwin имеет псевдотерминал и git clone запрашивает пароль, как и ожидалось. Я могу только скопировать то, что вы видите, если я ssh -T на другую машину, а затем запустить git clone.

Если вы unset DISPLAY запустите git clone, вы, вероятно, получите другое сообщение об ошибке - ssh больше не будет пытаться использовать ssh-askpass для чтения парольной фразы, но псевдотерминал от него все равно не будет что читать один!

0 голосов
/ 28 апреля 2018

Во-первых, рассмотрите возможность использования Git для Windows из CMD (или git bash): вам вообще не нужен Cygwin. Это означает, что вы можете протестировать ваш ssh из git bash, используя упрощенную PATH.

set G=c:\path\to\latest\git
set PATH=%G%\bin;%G%\usr\bin;%G%\mingw64\bin
set PATH=%PATH%;C:\windows\system32;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\

Я понимаю, что уже работает в CMD, но использование упрощенного PATH обычно является хорошей практикой для проверки того, что оно работает с тем, что нам нужно (а не из-за какой-либо другой программы PATH)

Во-вторых, в Cygwin (если вы должны его использовать) попробуйте хотя бы ssh -Tv ssh://username@server.edu, чтобы увидеть, сохраняется ли та же ошибка и есть ли в подробном выводе больше подсказок.
Проверьте значение $HOME (echo $HOME), чтобы узнать, есть ли у $HOME/.ssh ваши личные / публичные (id_rsa / id_rsa.pub) ключи.

...