如果文件名是默认文件名,SSH 密钥有效,但在重命名时无效

SSH key works if the file name is the default, but not when it's renamed

我想为我的 GitHub 帐户生成一个 SSH 密钥。按照 this 指南,我 运行 ssh-keygen -t ed25519 -C "my@email.com"。我给了它文件名 github_main 并输入了密码。一切正常。
运行 ssh-add ~/.ssh/github_main 给出了一个问题,但我通过 运行 路径稍微不同的命令解决了这个问题。它返回 Identity added: C:/Users/brent/.ssh/github_main (my@email.com),所以我假设一切正常。

然后我测试了与 ssh -T git@github.com 的连接。它说我已成功连接,但 GitHub 不提供 shell 访问权限,这在我看来很有效。

我将 SSH 令牌添加到我的 GitHub 帐户,也没有问题。然后,我尝试通过 SSH 克隆我的一个存储库,但 st运行gely 没有用;它给出了以下结果:

Cloning into 'my-repo'...
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

我尝试使用 HTTPS 克隆相同的存储库并且工作正常。经过大约一个小时的谷歌搜索和搜索,我多次读到文件名对结果没有影响,但我决定尝试将文件重命名为原始名称。我将 public 密钥重命名为 id_ed25519.pub,将私钥重命名为 id_ed25519。这一次,当我尝试使用 SSH 克隆存储库时,它要求输入密码并克隆了存储库。这让我很困惑,特别是因为到目前为止我读过的所有内容都告诉我文件名并不重要。

虽然它可以将文件命名为 id_ed25519,但我仍然想重命名这些文件,因为这个文件名没有告诉我任何关于密钥的信息,而且我只能像这样加密一个密钥.

您没有使用所有的默认名称,这意味着您需要告诉 ssh 您把东西放在哪里。为避免每次都重复自己,请在其配置中执行此操作,它会在 ~/.ssh/config 中查找。第一行:addkeystoagent yes。第二行:host github。第三行:hostname github.com。第四行:identityfile path/to/your/privateidentityfilehost 行开始一个块,你现在可以说 git clone git@github:yourghid/yourrepo 就足够了。您甚至可以为主机添加 user git 行,然后添加 git clone github:yourghid/yourrepo。拼写取决于你,如果我经常拼写,我会拼写 ghhost gh user git hostname github.com identityfile ~/.ssh/id_gh,然后 git remote add linux gh:torvalds/linux 有效。

man 5 ssh_config,man 第 5 节是文件格式。 Bash completion 知道这些东西,说 man 5 并按几次 Tab 键告诉它没有真正向我显示你有文档的所有文件格式。