git - 如果文件名是默认值,SSH 密钥有效,但重命名时无效
问题描述
我想为我的 GitHub 帐户生成一个 SSH 密钥。按照本指南,我跑了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 克隆我的一个存储库,但奇怪的是它不起作用;它给出了以下结果:
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 克隆相同的存储库,效果很好。经过大约一个小时的谷歌搜索和搜索,我多次阅读文件名对结果没有影响,但我决定尝试将文件重命名为原始名称。我将公钥重命名为id_ed25519.pub
,将私钥重命名为id_ed25519
. 这一次,当我尝试使用 SSH 克隆存储库时,它会要求输入密码并克隆存储库。这让我很困惑,特别是因为到目前为止我读过的所有内容都告诉我文件名无关紧要。
虽然它适用于将文件命名为id_ed25519
,但我仍然想重命名文件,因为这个文件名没有告诉我任何关于密钥的信息,而且我只能像这样加密一个密钥。
解决方案
您没有使用所有默认名称,这意味着您需要告诉 ssh 将内容放在哪里。为避免每次都重复自己,请在其配置中执行此操作,它会在~/.ssh/config
. 第一行:addkeystoagent yes
. 第二行:host github
。第三行:hostname github.com
。第四行:identityfile path/to/your/privateidentityfile
。这host
条线开始一个块,你现在可以说git clone git@github:yourghid/yourrepo
这就足够了。您甚至可以user git
为主机添加一行,然后git clone github:yourghid/yourrepo
. 拼写由你决定,如果我做了很多,我会拼写诸如 , 之类的东西gh
,host gh
user git
hostname github.com
identityfile ~/.ssh/id_gh
然后就git remote add linux gh:torvalds/linux
可以了。
说man 5 ssh_config
,man 第 5 节是文件格式。Bash 补全知道这些东西,说man 5
并点击几次选项卡告诉它没有真正向我展示你有 doc 的所有文件格式。
推荐阅读
- c# - C#8.0:具有默认实现的接口的受保护属性
- javascript - 如何接收用户输入的日期并将其与 date() javascript 函数匹配?
- rust - FnBox 示例抛出错误:盒装中没有 FnBox?
- stripe-payments - 为什么 Stripe checkout Webhooks 会将 customer_email 发送为 null?
- java - 创建输入字符菜单
- python - 并排显示两张 Folium 地图?
- html - 悬停在菜单上显示每个菜单中的下拉菜单列表
- ios - Swift:更改 iOS 13 的状态栏颜色
- javascript - 复选框收音机中的刷新方法不起作用
- c# - 在 Onion 架构中抛出异常与返回操作结果对象