我正在尝试使用以下命令通过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设置引起的。
不成功"解决方案"我到目前为止尝试过:
使用表格
的命令git clone ssh:// username:password@server.edu:path / to / repo / reponame
输入
取消设置GIT_ASKPASS 取消设置SSH_ASKPASS
并重试克隆。
最终解决方案是打开Windows命令提示符并使用它而不是Cygwin终端。 Cygwin中的哪个设置可能导致问题,我该如何解决?
答案 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-askpass
是SSH_ASKPASS
的默认设置,即使ssh
未设置,SSH_ASKPASS
也会使用它。)这说我无法复制到什么你看 - 我的Cygwin命令行有伪终端,git clone
提示输入密码。我只能将您看到的ssh -T
复制到另一台计算机中,然后运行git clone
。
如果您unset DISPLAY
然后运行git clone,您可能会收到不同的错误消息 - ssh将不再尝试使用ssh-askpass来读取密码短语,但它仍然没有伪终端,从中读取一个!