使用cygwin ssh-agent正在运行,但是git仍在提示输入密码

问题描述 投票:3回答:1

我在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':

我实际上使用SSH而不是HTTPS用于我的git连接(编辑私人信息):

$ 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。

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

windows git ssh cygwin ssh-agent
1个回答
0
投票

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

在Linux中,它使用如下安装:

sudo apt-get update
sudo apt-get --assume-yes install expect

在cygwin中,您可以在Tcl下找到它:

enter image description here

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

创建一个文件,让我们找到它并命名为~/.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

使用以下注释将以上<username><password>更改为您的登录ID:

  • 修改内容正好遵循您的git登录交互。
  • 如果您的<password>包含char $将其设置为\$,否则身份验证将失败。
  • 例如,如果你的密码mypa$$word然后把<password>作为mypa\$\$word

创建另一个文件~/.git_push

#!/usr/bin/bash
git remote set-url origin [email protected]:<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
© www.soinside.com 2019 - 2024. All rights reserved.