因为之前本地只生成了一套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
发表评论