配置多个ssh密钥对并且永久多ssh管理

这两天捣腾SSH,一直对其使用一知半解,由于要把博客迁移,弄来弄去发现还是部署到国内的coding吧
之前也弄过,但是由于重新安装了git-for-windows客户端,所以一开始用hexo d命令部署的时候报错了
趁着这次迁移也好好弄了一下本地的ssh管理,虽然还有些问题,但是至少比之前清晰一些了,这里也记录一下过程中遇到的问题

我的目的,将hexo生成的静态文件同时部署到github与coding上

安装git-for-windows客户端

下载地址 https://git-scm.com/download/win
无论是github还是coding都需要上传你的公钥,这两个地方可以上传相同的公钥,但也可以像我这样闲的蛋疼上传不同的公钥。

创建密钥对

使用ssh-keygen 来创建密钥对,命令为 ssh-keygen -t rsa -C "your_email@example.com",其实这里-C 后面的email地址无所谓,可以随便写,只是为了你方便而已。
输入完该命令以后,首先会让你给密钥文件起个名字,这个是文件名,叫什么随心情
生成密钥对
接下来让你输入密码,我这里直接回车,不用密码
然后它就会生成一个密钥对,像我这个设置就会生成yyxtest和yyxtest_pub两个文件,yyxtest.pub是公钥,谁都可以给,但是你私钥要自已保存好,谁拿到了你私钥就呵呵了。

上传公钥到github与coding中

根据github上的提示将公钥上传到github上你的个人账户中的ssh中
上传公钥到github中

同样的操作再生成一对密钥,将公钥上传到coding中,注意我这里是为了测试,你完全没有必要重新生成,你当然可以上传刚才生成的yyxtest.pub这个公钥,当然后面会有一些问题,之后再详细说明。

上传文件到github上

赶紧上传个文件到github上试试吧(使用hexo d 来部署),其实你可以先不用上传文件,可以用ssh -vT git@github.com 来查看一下信息
这里你不用试了,肯定是不行的…… 抗都被我踩了
Permission denied
提示Permission denied,原因是你现在用的私钥还是id_rsa,并不是刚才生成的yyxtest,
ssh默认使用id_rsa,如果连id_rsa都没有,那你还不赶紧生成一个默认的。

添加yyxtest私钥到git bash中

根据github上的提示generate SSH keys 先将yyxtest添加到git bash中,
使用ssh-add ~/.ssh/yyxtest ,然后顺利提交代码成功,但是在提交文件到coding时又不行了,提示

Error: git@git.coding.net: Permission denied (publickey).
fatal: Could not read from remote repository.

没办法,再用刚才的ssh-add 命令将用于coding的私钥也添加到git bash中,这次coding也可以提交了

配置ssh本地的config文件

试试关掉这个git bash,然后再试着用hexo d 提交一些文件,这次又不行了,还是提示Permission denied,这怎么能行,总不能每次提交更新都输入ssh-add 添加各种私钥吧,这时就要用到config这个文件了。
如果git安装是默认的话,将会把生成的公钥保存在C:\Users\username.ssh目录中(我用的是windows,不丢人),里面如果没有config文件,自已生成一个,里面写一些配置信息,各种字段说明如下

Host:代码托管平台的别名,但是这个别名和后面要用到的ssh链接 git@github.com:xxx/xxx.git 中的 @ 符号后面的内容要一致,而一般来说github默认提供的就是git@github.com,因此为了方便,github的Host写github.com即可,别取别名了
HostName:代码托管平台真正的IP地址或域名,写域名就行,
IdentityFile:对应的密钥文件路径。必须写绝对路径,windows下可以写 C:\Users\xxx.ssh\yyxtest
PreferredAuthentications:配置登录时用什么权限认证。可设为publickey,password publickey,keyboard-interactive等
User:对应的用户名。

我这里有两个私钥,所以我的配置文件如下

Host git.coding.net
    HostName git.coding.net
    IdentityFile C:\Users\kevin\.ssh\rsa_coding
    PreferredAuthentications publickey
    User yangyanxing

Host github.com
    HostName github.com
    IdentityFile C:\Users\kevin\.ssh\yyx
    PreferredAuthentications publickey
    User kevinkelin

之前说过,你没有必要为不同的网站生成不同的密钥,用同一份也可以,如果用同一份,这里IdentityFile也要写一样的
保存之后先不用着急提交,使用ssh -vT 查看一下连接是否有问题
github 提示 Hi kevinkelin! You've successfully authenticated, but GitHub does not provide shell access.
coding提示 yangyanxing,你好,你已经通过 SSH 协议认证 Coding.net 服务,这是一个个人公钥
这样就可以直接使用hexo d来提交文件更新了!

注意的问题

  1. config文件中的host 配置是区分大小写的,github.com 和github.COM是不同的,一定要写对
  2. coding的host是git.coding.net 而不是coding.net

遗留问题

git bash客户端,如果在非C盘上右键的方式启动,那么还是不行,它会寻找当前盘的中的.ssh目录,根本不存在的目录,所有找私钥肯定也找不到,只能先启动git bash,然后cd 到操作的目录中,这个我再研究研究怎么回事。

参考文章

欢迎关注我的公众号--序语程言,里面会分享一些编程的基础与一些问题的解决

坚持原创技术分享,您的鼓励将是我继续前进的动力!求鼓励,求支持!