git - 如何处理多个 ssh 密钥
问题描述
我在两个 github 帐户中为不同的项目创建了两个 ssh 密钥。一个是我的帐户,另一个是公司帐户 github。我从事具有不同 ssh-key 的项目。所以每次当我打开不同的项目时,我都会输入这个命令。
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa_my_git
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa_company_git
我希望通过将配置文件添加到项目或 PC 或使用其他方式来避免每次都输入此内容。
解决方案
您只需运行这三个命令中的每一个;您可以将它们放在您拥有的任何登录 shell 配置文件中(例如,.bash_profile
)。
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa_my_git
ssh-add ~/.ssh/id_rsa_company_git
现在,当您使用 时git
,ssh
将简单地尝试它在代理中找到的任何密钥,直到找到一个有效的密钥。
这很好,只要你没有太多的键可以尝试,在 X 次尝试失败后远程端不会阻止你,然后你可以尝试正确的键。在这种情况下,您可以修改您的ssh
配置,为 GitHub 创建一个使用单个特定密钥的别名,以便ssh
始终可以在第一次使用正确的密钥。这种方法也完全消除了使用的需要ssh-agent
,尽管当您第一次将密钥加载到代理中时,如果您有密码并且只想键入一次,您可能仍然想要使用。
例如,您可以将以下内容放入您的~/.ssh/config
文件中。
Host github-me
Hostname github.com
IdentityFile id_rsa_my_git
Host github-company
Hostname github.com
IdentityFile id_rsa_company_git
然后你会使用类似的命令
git clone git@github-me:me/personal_project
git clone git@github-company:company/work_project
并且ssh
会根据主机名知道使用哪个密钥。
推荐阅读
- nagios - Zabbix 是否能够将消息转发到另一个监控平台,如 Icinga2(管理器 MOM 配置管理器)
- javascript - 如何使用 v-on=$listeners 点击原生
- delphi - Chilkat:请求远程签名时出错
- jira - 未收到来自 Jira 的电子邮件
- reactjs - 根据用户对 React Hook Form 的输入显示条件信息
- php - 使用 php-fpm 的 nginx 未加载/运行。没有错误
- java - google-java-format eclipse 插件忽略格式化程序:关闭评论
- python - 在主应用程序中反转 url 时找不到 Django Reverse
- c++ - 等待第一个未来在 C++ 中完成
- google-sheets - 在表 A 中的单元格上查找字符串并将找到的字符串复制到另一个表 B