5

使用 git for windows (git-scm.com) 和脚本,我可以让 Bash 停止询问密码,但我似乎无法从 git GUI 中删除密码提示。

远程的 url 使用 ssh 链接(见下文),所以我很确定这不是问题。但我不是 git 和 SSH 方面的专家 ..

git@gitlab.com:repo

已使用提供的密码创建 SSH 密钥 (ED25519),并将公钥添加到主机帐户。SSH 密钥存储在典型位置C:\Users\<user>\.ssh\id_ed25519。在 GUI 中单击Help->Show SSH Key时,它会显示我正在使用的 ssh 密钥。ssh-agent 在后台运行,并且 ssh 密钥已通过以下设置添加到 ssh-agent。

设置 ssh-agent 我使用了此处提供的代码(复制并粘贴在下面以供参考)在路径.bashrc下创建文件。C:\Users\<user>在 bash 提示下,一切似乎都按预期运行,但在 Git GUI 下却没有。

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

对我来说,在执行推送、获取或任何其他相关远程功能时,Git GUI 似乎没有使用 ssh-agent。在设置 ssh 代理、.bashrc脚本和/或 GUI 以完成删除密码提示时,我是否遗漏了一个步骤?还是有其他事情发生?

非常感谢任何和所有帮助,在此先感谢

4

2 回答 2

2

.bashrc启动 Git Bash 时运行。这仅影响 bash 环境,但对整个 Windows 没有任何作用。运行 GUI 时,没有任何设置.bashrc生效。我在我的 Windows 笔记本电脑上使用 IntelliJ 中的 Git 集成,但仍然不知道如何使用我的 SSH 密钥。我目前打开 Git Bash 来拉、推或任何与遥控器交互的东西。

于 2019-06-18T14:55:22.457 回答
2

查看我在这里找到的指南,这导致我以不同的方式搜索事物。最终告诉我使用 Putty 及其 ssh 代理为我管理密码。

最终偶然发现了这篇文章,他们在其中讨论了如何git使用 putty 的 ssh 代理。这只是归结为我将GIT_SSH指向的环境变量放入plink.exe腻子的安装文件夹中。

使用此方法时,它确实会出现一个错误,我不确定这只是我的机器/安装,或者这是否会影响所有人。通过在主机中打开 putty 和 ssh 以这种方式生成缓存,在这篇文章中解决了这个问题。因为已经有关于此的帖子,所以我将避免进一步说明为什么git不能为我执行此步骤。

还要注意我上面的问题,我使用.bashrc脚本在打开 git bash 时自动将密钥启动到 OpenSSH ssh-agent 中。由于这种腻子方法,这个脚本和所有相关文件都被删除了。删除文件的简短列表是agent.env脚本创建的文件.bashrc、保存脚本的文件以及.pash_profile创建的文件。

完成后, git bash 和 git gui 都成功地使用了 putty 代理,并且可以以任何我喜欢的方式使用。我什至可以从上下文菜单中启动 git gui 并让它识别 ssh 键并且不再提示输入密码。

于 2019-07-11T19:23:38.957 回答