我在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)
我在这个问题上找到的最接近的问题是以下问题:
但是,我没有在/ git / bin下重命名我的ssh。
有关如何诊断此问题的任何建议?谢谢!
答案 0 :(得分:1)
这里有一个比上面更简单的解决方案:
现在,添加 SSH 密钥后,您无需继续在 Windows 命令提示符或 Cygwin Bash shell 中键入密码。
答案 1 :(得分:0)
问题仍然存在。似乎它与不同的路径有关,尚未修复。 您可能考虑使用 expect 作为ssh-agent的替代方法,以进行git登录交互。
在Linux中,它的安装方式如下:
sudo apt-get update
sudo apt-get --assume-yes install 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
将以上<username>
和<password>
更改为您的登录ID,并注意以下几点:
<password>
包含字符$
,则将其设置为\$
,否则身份验证将失败。 mypa$$word
然后将<password>
设置为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