明明使用了SSH连接仓库,为什么每次都要我输入电脑密码?

1,729 阅读4分钟

场景

在使用 SSH 连接 Git 仓库时,你可能已经按照官方文档或者各大技术博客的指导生成了 SSH 密钥,并将公钥添加到 GitHub、GitLab 等平台上。但在执行 git pushgit pull 时,系统仍然会弹出提示,要求你输入电脑(Mac)的密码。本文将详细解析这一问题的原因,并提供解决方案,让你摆脱重复输入密码的烦恼。

问题描述

尽管已经使用 SSH 协议连接仓库,但每次进行 Git 操作时,系统依然要求输入密码。这并不是 GitHub 或 GitLab 的账户密码,而是要求你输入你在生成 SSH 密钥时为私钥设置的 passphrase(密钥保护密码),或者说是用于解锁私钥的密码。

原因解析

1. SSH 密钥的 passphrase 保护

当你生成 SSH 密钥时(例如使用 ssh-keygen -t rsa -b 4096 -C "your_email@example.com"),系统会询问是否为私钥设置 passphrase。设置 passphrase 后,即使你使用了 SSH 连接,每次使用该私钥建立连接时,都需要输入该密码来解锁密钥。

参考:GitHub 官方文档 - Generating a new SSH key and adding it to the ssh-agent

2. SSH 密钥未自动加载到 SSH Agent 和钥匙串中

macOS 提供了 SSH Agent 和钥匙串功能,可以帮助缓存 SSH 密钥的解锁信息,从而避免每次操作都需要手动输入密码。如果你没有将 SSH 密钥添加到 SSH Agent 中,或者没有配置使用 macOS 的钥匙串,那么每次 SSH 连接时就会弹出密码提示。

参考:腾讯云开发者社区 - 设置SSH密钥后,仍然需要从GitHub输入密码

解决方案

1. 检查并生成 SSH 密钥

首先,确保你已经在本地生成了 SSH 密钥。可以在终端中运行以下命令检查:

ls -al ~/.ssh

如果没有看到 id_rsaid_rsa.pub 文件,可以使用以下命令生成:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

生成过程中,如果选择设置了 passphrase,那么记得后续需要将其缓存到 SSH Agent 和钥匙串中。

2. 启动 SSH Agent 并添加密钥到钥匙串

启动 SSH Agent:

eval "$(ssh-agent -s)"

然后,将 SSH 密钥添加到 SSH Agent,同时保存到 macOS 钥匙串中。在 macOS 10.12 及以上版本,可以使用以下命令:

ssh-add -K ~/.ssh/id_rsa

如果你的系统提示 -K 参数不可用,可以尝试:

ssh-add --apple-use-keychain ~/.ssh/id_rsa

这样,SSH Agent 会将你的私钥解锁信息缓存到钥匙串中,下次使用时就不再需要重复输入密码。

参考:如何让Git记住密码(Git Credential Helper)的几种方式

3. 配置 SSH 客户端使用钥匙串

为了确保每次使用 SSH 连接时,都能自动加载并使用钥匙串中的密钥信息,建议在 ~/.ssh/config 文件中添加如下配置(如果该文件不存在,请新建一个):

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa

这段配置将确保:

  • AddKeysToAgent yes:自动将密钥添加到 SSH Agent 中。
  • UseKeychain yes:使用 macOS 钥匙串保存的密钥解锁信息。
  • IdentityFile ~/.ssh/id_rsa:指定默认使用的私钥文件。

4. 测试 SSH 配置

完成上述步骤后,在终端中测试 SSH 连接是否正常:

ssh -T git@github.com

如果配置正确,你应该会看到类似下面的提示:

Hi username! You've successfully authenticated, but GitHub does not provide shell access.

这说明 SSH 密钥已正确加载,后续的 git pushgit pull 操作将不会再提示输入密码。

总结

出现每次执行 Git 操作时都要求输入电脑密码的原因,主要是因为 SSH 密钥启用了 passphrase 保护,而该密钥没有自动缓存到 SSH Agent 与 macOS 钥匙串中。通过以下步骤可以解决问题:

  1. 生成并确认 SSH 密钥:确保你的 SSH 密钥已经生成并正确配置。
  2. 启动 SSH Agent 并添加密钥到钥匙串:使用 ssh-add -Kssh-add --apple-use-keychain 命令缓存私钥解锁信息。
  3. 配置 SSH 客户端:在 ~/.ssh/config 文件中添加自动加载和使用钥匙串的配置。

按照这些步骤配置后,你将摆脱每次 Git 操作时重复输入密码的烦恼,从而让开发过程更加高效顺畅。

参考腾讯云开发者社区以及博客园