我已经按照以下说明设置了 OpenSSH2019 年该问题的更新包括设置GIT_SSH=C:\Windows\System32\OpenSSH\ssh.exe
。效果很好,但使用 git 时git bash
出现以下错误:
$ git pull
CreateProcessW failed error:193
ssh_askpass: posix_spawn: Unknown error
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.
如果我使用ssh-add
,git bash
我会得到不同的错误:
$ ssh-add
Could not open a connection to your authentication agent.
这似乎是因为ssh-add
使用的是/usr/bin/ssh-add
而不是ssh-add
在C:\Windows\System32\OpenSSH\
,为了纠正这个问题,我尝试使用完整路径:
$ /c/Windows/System32/OpenSSH/ssh-add.exe
CreateProcessW failed error:193
ssh_askpass: posix_spawn: Unknown error
这给了我和以前一样的错误。
我如何使用 Windows 的 OpenSSH 命令git bash
?
答案1
我遇到了同样的问题,并发现在git bash
之前添加/usr/bin
了PATH
。
我真正棘手的解决方案是将 OpenSSHs 的路径添加ssh-add
到我的路径中.bashrc
:
PATH="/c/Windows/System32/OpenSSH:${PATH}"
答案2
我知道这个话题有点老了,但是我最近偶然发现了这个问题并找到了解决方案。
根据 OpenSSH 文档,askpass 用于显示密码 gui。并且,OpenSSH 仅在设置了环境变量 SSH_ASKPASS 时才尝试使用此“askpass 命令”!因此,解决此问题的最简单方法是取消设置此环境变量。
unset SSH_ASKPASS
只需将其放入 .bash_profile 和/或 .bashrc 中,然后重新打开 shell 即可查看效果。您甚至可以先在打开的 shell 中执行它来测试它,但显然不是那么永久的。
答案3
添加以下代码片段github 文档到.bashrc在里面gitbash 外壳对我有用:
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
阅读完整说明github 文档
答案4
对于我来说,在 win11 上按照以下步骤操作,当我添加带密码的 ssh 私钥,然后重启我的电脑,然后再次启动 gitbash 时,我不需要再次输入密码,所以对我来说没问题!希望它也适合你!
这里重要的一步是设置具有适当权限的 ssh 私钥,我的操作系统是Win11 21H2,git版本是git版本 2.40.0.windows.1,以下步骤对我来说很有效。你可以参考一下。
首先,设置具有适当权限的正确 ssh 私钥,
- 选择文件(ssh私钥),右键单击,选择文件特性
- 点击安全选项卡,点击先进的按钮,在弹出窗口中,然后
- 你可能会看到很多用户有 ssh 私钥访问能力,那么
- 点击禁用继承按钮,在弹出窗口中选择第一,它将清理继承自驱动器的属性(如
E:\\
- 添加或者添加用户,然后选择添加主体或者添加对象在弹出窗口中,输入你的电脑用户名,点击右键检查姓名,结果将变成类似电脑名\用户名,然后点击好的按钮确认
- 删除所有其他用户,只留下刚刚添加的用户名,也就是电脑名\用户名,然后点击好的按钮
设置正确的 Windows OpenSSH for GitBash 命令,windows openssh for windows 11 位于C:\Windows\System32\OpenSSH\
(如果没有,请搜索)
~/..profile
使用以下行进行编辑导出 PATH="/C/Windows/System32/OpenSSH/":$PATH
启动 GitBash,然后确保在 GitBash 中可以获取 Windows 系统 ssh 命令:运行以下命令进行检查
which ssh
,命令的输出应该显示(或类似内容)/c/Windows/System32/OpenSSH/ssh.exe
接下来就很简单了,只需做正常的事情:
ssh-add -l
查看是否ssh-agent
启动,若未启动则执行ssh-add path/to/you/ssh/private/key
关键操作者上层台阶ssh-add -l
再次检查ssh -T [email protected]
以下是我使用的 shell 脚本,适用于 windows 和 linux。你可以参考它。复制并设置 SSH 私钥文件路径为你自己的,然后将其保存到文件中,例如~/.ssh/EnableGitHubSSH.shsource ~/.ssh/EnableGitHubSSH.sh
,然后在 中添加一行代码~/.profile
,就大功告成了!尝试使用 luanch GitBash 或终端进行 github SSH 登录检查!
is_windows=$(uname -s | grep '[MINGW|MSYS_NT|CYGWIN_NT]')
if [ -n "${is_windows}" ]; then
# 将系统 OpenSSH 查找路径提前
# 删除 $HOME/bin (Git为啥会有这个设置?)
# Windows 系统 PATH 修正,使用系统默认 OpenSSH, 不用每次重启后都输入密码
# NOTE: 使用系统默 OpenSSH 时, 密码加密保存在系统中,SSH 的配置目录在 C 盘用户目录下
XPATH=$(echo $PATH | sed "s#/c/Windows/System32/OpenSSH:##g" | sed "s#$HOME/bin:##g");
export PATH="/c/Windows/System32/OpenSSH":$XPATH;
unset XPATH;
fi
# 自动生成的文件,缓存Agent运行状态
tmpfile=~/.ssh/_SSHAgentEnvInfo.sh
# SSH私钥(GitHub免密登录认证)
sec_key=~/.ssh/YOUR-SSH-PRIVATE-KEY-ONE
test -f "$tmpfile" && source "$tmpfile" >| /dev/null
# agent_run_state:
# 0 = agent running with key
# 1 = agent running without key
# 2 = agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
# 添加 Git 免密登录 GitHub 使用的 SSH 私钥
if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
if [ -z "${is_windows}" ]; then
# Linux 需要运行的命令
(umask 077; ssh-agent -s >| "$tmpfile")
source "$tmpfile" >| /dev/null
else
# Win 11 手动配置 OpenSSH 开机启动
# SSH_AUTH_SOCK 随便设置一个值,防止每次启动 GitBash 都加载私钥(需要输入密码)
echo "SSH_AUTH_SOCK=OK;" > "$tmpfile"
fi
ssh-add "$sec_key" 2>/dev/null
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
ssh-add "$sec_key" 2>/dev/null
fi
unset tmpfile sec_key is_windows