在Cygwin中通过SSH进行Git克隆不会提示输入密码,而是输出错误

时间:2018-04-28 05:09:59

标签: git ssh cygwin

我正在尝试使用以下命令通过SSH从受密码保护的无头服务器执行Git克隆。我正在使用Cygwin和OpenSSH。我可以使用Cygwin对服务器进行交互式SSH而不会出现问题。该问题仅发生在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:// username:password@server.edu:path / to / repo / reponame

  2. 输入

    取消设置GIT_ASKPASS 取消设置SSH_ASKPASS

  3. 并重试克隆。

    1. 在我的本地计算机上打开x-forwarding服务器并重试克隆。
    2. 最终解决方案是打开Windows命令提示符并使用它而不是Cygwin终端。 Cygwin中的哪个设置可能导致问题,我该如何解决?

2 个答案:

答案 0 :(得分:2)

首先,考虑使用来自CMD(或git bash)的Git for Windows:你根本不需要Cygwin。这意味着使用简化的PATH从git bash测试你的ssh。

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)密钥。

答案 1 :(得分:0)

这是因为您在Cygwin下设置了DISPLAY环境变量吗?从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 clone在没有伪终端的进程中运行。 (似乎/usr/lib/ssh/ssh-askpassSSH_ASKPASS的默认设置,即使ssh未设置,SSH_ASKPASS也会使用它。)这说我无法复制到什么你看 - 我的Cygwin命令行有伪终端,git clone提示输入密码。我只能将您看到的ssh -T复制到另一台计算机中,然后运行git clone

如果您unset DISPLAY然后运行git clone,您可能会收到不同的错误消息 - ssh将不再尝试使用ssh-askpass来读取密码短语,但它仍然没有伪终端,从中读取一个!