![如何让 git 不提示输入 ssh 密钥的密码?](https://linux22.com/image/1476187/%E5%A6%82%E4%BD%95%E8%AE%A9%20git%20%E4%B8%8D%E6%8F%90%E7%A4%BA%E8%BE%93%E5%85%A5%20ssh%20%E5%AF%86%E9%92%A5%E7%9A%84%E5%AF%86%E7%A0%81%EF%BC%9F.png)
我正在使用 git bash,并使用 ssh-keygen 设置 ssh 密钥,每次我对 repo git 执行某些操作时,都会要求我输入密码/c/Users/jankiewj/.ssh/id_rsa
。有没有办法禁用该密码。
编辑: 我编辑了原标题(删除了 Windows),因为我刚刚在工作笔记本电脑上安装了全新安装的 Ubuntu,当 ssh 密钥有密码短语时,它总是要求输入密码短语,解决这个问题的方法是相同的。这可能在 MacOSX 上也一样,它也是 Unix,使用相同的基本工具。
答案1
答案2
稍微好一点的永久解决方案是在 Windows 上打开 git bash 时自动启动 ssh-agent。您可以将以下内容复制/粘贴到 .profile 或 .bashrc 中。我更喜欢将其放在。轮廓
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 帮助文章
答案3
TDLR:对于 Windows 用户,
- 跑步
ssh-add "C:\\Users\\<your user>/.ssh/id_rsa"
- 不是
ssh-add ~/.ssh/id_rsa
例如我经常看到这样的情况:
$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /c/Users/User/.ssh/id_rsa:
Identity added: /c/Users/User/.ssh/id_rsa (/c/Users/User/.ssh/id_rsa)
$ git pull
Enter passphrase for key 'C:\Users\User/.ssh/id_rsa':
注意路径分隔符不一致:ssh-agent 使用 Unix 路径分隔符转换 ~,而 git 使用 Windows 路径分隔符。考虑到文件路径id_rsa
用作键,这解释了为什么缓存会丢失。
- 另一个区别
C:/
是/c/
- 相关备注:当 git 要求您输入密码时,它不会被缓存,因此您可以无限期地在那里输入它。尝试将短语传递给
ssh-add
only。 - 在 Windows 上,假设
~
是“多值的”,因此最好明确说明。 ssh-add
查看默认位置,如~/.ssh/id_rsa
。在 Windows 上,假设这是模棱两可的。明确传入明确格式的路径,而不是依赖默认路径:ssh-add "C:\\Users\\<your user>/.ssh/id_rsa"
,即在@velval 的回答中也是如此。
答案4
钥匙链是一个智能地完成这项工作的程序。
它应该从 .bashrc(或等效文件)运行,它将正确设置环境,除了应该加载哪些键之外无需其他配置。
这是我使用的:keychain --quiet key1.pem key2.pem
它意识到 shell 是 Zsh,并且与我使用 Bash 时的工作方式完全相同。