【问题标题】:Using cygwin ssh-agent is running but git is still prompting for passphrase使用 cygwin ssh-agent 正在运行,但 git 仍在提示输入密码
【发布时间】:2017-03-06 16:21:18
【问题描述】:

我在 Windows 7 上使用 cygwin 作为我的终端。我找到了几个在 cygwin 中运行 ssh-agent 的建议,因此我不必每次运行 git fetch/pull/push 时都输入密码。我将以下内容添加到我的 .bash_profile 并重新启动了我的 cygwin 会话:

SSH_ENV="$HOME/.ssh/environment"

function start_agent {
    echo "Initialising new SSH agent..."
    /usr/bin/ssh-agent -s | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add;
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
    . "${SSH_ENV}" > /dev/null
    #ps ${SSH_AGENT_PID} doesn't work under cywgin
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi

看起来 ssh-agent 和 ssh-add 运行成功了,但仍然提示我输入密码。

Initialising new SSH agent...
succeeded
Enter passphrase for /cygdrive/c/Users/<username>/.ssh/id_rsa:
Identity added: /cygdrive/c/Users/<username>/.ssh/id_rsa (/cygdrive/c/Users/<username>/.ssh/id_rsa)

$ ssh-add -l
2048 <fingerprint> /cygdrive/c/Users/<username>/.ssh/id_rsa (RSA)

$ git fetch --all
Fetching origin
Enter passphrase for key '/c/Users/<username>/.ssh/id_rsa':

事实上,我的 git 连接使用的是 SSH 而不是 HTTPS(经过编辑的私人信息):

$ git remote -v
origin  ssh://git@XXX/XXX.git (fetch)
origin  ssh://git@XXX/XXX.git (push)

我发现这个问题最接近的问题是以下问题:

ssh-agent doesn't work / save me from typing passphrase for git

但是,我没有在 /git/bin 下重命名我的 ssh。

关于如何诊断此问题的任何建议?谢谢!

【问题讨论】:

  • 在日志中可以看到不同的路径。你的~/.ssh/config 怎么样?
  • 我没有。
  • @Jakuje,我注意到路径不同 - ssh-add 一个是 /cygdrive/c/Users/&lt;username&gt;/.ssh/id_rsa,但 git 一个是 /c/Users/&lt;username&gt;/.ssh/id_rsa。我如何使这些匹配?
  • 有同样的问题。我怀疑,问题与不同的路径有关。到目前为止运气好吗?
  • 2021:请参阅 Randy Groom 对安装了适用于 Windows 的 Git 的 Windows 10 的回答。

标签: windows git ssh cygwin ssh-agent


【解决方案1】:

这是一个比上面更简单的解决方案:

  1. 启动服务(可以通过在搜索中键入服务找到 任务栏上的框)
  2. 编辑“OpenSSH 身份验证代理”的设置
  3. 将启动类型设置为自动并启动服务
  4. 启动编辑系统环境变量(输入环境 在任务栏的搜索框中)
  5. 添加 GIT_SSH 变量并将值设置为 "C:\Windows\System32\OpenSSH\ssh.exe"

现在添加 SSH 密钥后,您无需继续在 Windows 命令提示符或 Cygwin Bash shell 中键入密码。

【讨论】:

    【解决方案2】:

    问题仍然存在。似乎它与不同的路径有关,尚未修复。 您可以考虑使用 expect 作为 ssh-agent 的替代品以进行 login with passphrase 交互。

    在 Linux 中通常是这样安装的:

    $ sudo apt-get update
    $ apt-get install --assume-yes --no-install-recommends apt-utils expect 
    

    在cygwin中你可以在Tcl下找到它:

    这里是如何使用它的简单步骤。

    创建一个文件,让我们找到它并命名为~/.expect_push

    #!/usr/bin/expect -f
    spawn git push origin master
    expect "Username for 'https://github.com':"
    send "<username>\n";
    expect "Password for 'https://<username>@github.com':"
    send "<password>\n";
    interact
    

    将上面的&lt;username&gt;&lt;password&gt; 更改为您的登录ID,并附上以下说明:

    • 根据您的 git 登录交互修改内容。
    • 如果您的&lt;password&gt; 包含字符$,请将其设置为\$,否则身份验证将失败。
    • 例如,如果您的密码为mypa$$word,则将&lt;password&gt; 设置为mypa\$\$word

    创建另一个文件~/.git_push

    #!/usr/bin/bash
    git remote set-url origin git@github.com:<username>/<repo>.git
    git add .
    git commit -m "my test commit using expect"
    expect ~/.ssh/.expect_push
    

    使它们可执行并在/bin中创建符号链接

    $ chmod +x ~/.expect_push
    $ chmod +x ~/.git_push
    $ cd /bin
    $ ln -s ~/.git_push push
    

    然后你就可以push到远程,无需填写用户名和密码或密码

    $ cd /path/to/your/git/folder
    $ push
    

    【讨论】:

      猜你喜欢
      • 2020-04-03
      • 2013-04-03
      • 1970-01-01
      • 2023-03-28
      • 2018-04-19
      • 1970-01-01
      • 2014-02-28
      • 2012-02-18
      • 2023-02-16
      相关资源
      最近更新 更多