阿毛
It's me !
想你所想
ssh 多秘钥管理

因为之前本地只生成了一套ssh秘钥,当公司的项目和个人git的项目一块使用时候,就感觉比较乱,于是想要分类处理下。

1、ssh-keygen生成秘钥

ssh-keygen -t rsa -C "hi_jumpboy@163.com"
  • -t: 指定加密算法
  • -C:公秘钥相关内容,一般填写邮箱,好做账户关联。当然随便填也可以。

注意执行后,先会让你确认,秘钥和公钥的文件路径。不要直接回车,这里需要重命名,输入想要存放秘钥公钥的完整路径,避免默认的“id_rsa”命名,造成无端的冲突。这里可以将多套秘钥公钥都放在家目录下,如“/Users/humh/.ssh”,只要保证每套公钥秘钥文件名不同即可。

2、ssh-add加入缓存

在生成完秘钥后,还需要将秘钥加入到ssh-agent的缓存中

ssh-add -K ~/.ssh/jumpboy_id_rsa

3、配置“config”文件

在秘钥公钥目录下(这里为“/Users/humh/.ssh”),配置“config”文件,文件大致内容为:为不同Host配置不同的ssh规则,如使用秘钥路径,ssh连接时长,是否免密等等,Host名类似正则。在进行ssh连接时,会读取config文件,自上而下进行匹配。如果没有匹配到Host,则会按默认的规则处理,如默认秘钥位置,“/Users/humh/.ssh/id_rsa”。

如下,config文件内容为:

Host github
HostName github.com
    User git
    AddKeysToAgent yes
    UseKeychain yes
    IdentityFile ~/.ssh/jumpboy_id_rsa
Host superman
    User cotilla
    UseKeychain yes
    TCPKeepAlive yes
    ServerAliveInterval 120
    IdentityFile ~/.ssh/id_rsa
Host *
    TCPKeepAlive yes
    UseKeychain yes
    IdentityFile ~/.ssh/id_rsa
    ServerAliveInterval 120

这样的效果就是,如果从github上通过ssh方式进行git操作的话,会使用“~/.ssh/jumpboy_id_rsa”。如果ssh superman的话,会使用“~/.ssh/id_rsa”。其他则也使用“~/.ssh/id_rsa”。当然superman也可以不配置IdentityFile项,这里为了规范还是配置了。

注意,如果HostName没有配置的话,Host必须是域名或ip。这里因为superman就是我在本地hosts(/etc/hosts)文件中为某个IP配置的“域名”,所以没有再配置HostName了。

4、向目标主机上传公钥凭证

如果是github或者其他代码托管平台,则通过账户UI界面,将第一步生成的公钥内容粘贴配置即可。其他主机的话,就是将公钥文件(.pub)上传即可。


经过上述操作,最终达到的效果就是,对于公司的非github仓库项目进行git操作时,如gitlab或codeup,使用最初生成的“id_rsa”。ssh 公司主机也一样。操作自己的github仓库,用的“jumpboy_id_rsa”。

整个实践过程,参考了(感谢!):
https://zhuanlan.zhihu.com/p/62071906

发表评论

textsms
account_circle
email

想你所想

ssh 多秘钥管理
因为之前本地只生成了一套ssh秘钥,当公司的项目和个人git的项目一块使用时候,就感觉比较乱,于是想要分类处理下。 1、ssh-keygen生成秘钥 ssh-keygen -t rsa -C "hi_jumpboy@163.…
扫描二维码继续阅读
2020-12-07