如何让 git 不提示输入 ssh 密钥的密码?

如何让 git 不提示输入 ssh 密钥的密码?

我正在使用 git bash,并使用 ssh-keygen 设置 ssh 密钥,每次我对 repo git 执行某些操作时,都会要求我输入密码/c/Users/jankiewj/.ssh/id_rsa。有没有办法禁用该密码。

编辑: 我编辑了原标题(删除了 Windows),因为我刚刚在工作笔记本电脑上安装了全新安装的 Ubuntu,当 ssh 密钥有密码短语时,它总是要求输入密码短语,解决这个问题的方法是相同的。这可能在 MacOSX 上也一样,它也是 Unix,使用相同的基本工具。

答案1

您可以在 git bash、Windows WLS 或真实 GNU/Linux 上的 bash 中运行它。

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa

它会在第二个命令中要求输入密码短语,仅此而已。您需要执行的每个其他操作(曾经需要密码短语)都不会要求您输入密码短语(请参阅下面屏幕截图中的示例):

在 Windows 上的 git bash 中添加密码

答案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-addonly。
  • 在 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 时的工作方式完全相同。

相关内容