多SSH KEY切换部署同步代码
需求场景
大部分开发者个人的代码基本都同步在代码托管平台管理,业内著名的有github、gitlab等,国内也有开源中国的码云(gitee)平台、coding.net平台。有时候,想玩一些有趣的东西,比如用流行的 CMS 搭建一套自己的博客系统(比如 Wordpress),而这些 CMS 都支持在线更新功能、打补丁 fix bug,增加一些合适的插件等。这样我们可以直接在管理后台选择更新系统,而无需先下载到本地,再通过FTP等方式上传到服务器重新部署。
我们喜欢用一些免费的云服务,但都有时长限制,说不定哪天就把我们的服务干掉了,毕竟免费的,服务稳定性不能保障。所以,这些云服务器只能运行代码,却不能做代码托管。于是,我们每次在线更新完功能之后,需要把代码备份到代码托管平台。
一般情况下,我们会单独生成一个 ssh key 公钥用于备份数据,而不是和其他公钥混合使用,避免因为因为某些操作不安全,造成代码丢失。当然你也可以选择一个其他账户操作也是可以的,但如果选择其他账户了,也就没有这篇文章的存在了。还是回到多个 ssh key 的问题上,默认情况下,RSA 算法的 ssh
私钥文件名为id_rsa
,我们可以通过ssh-keygen
生成公钥的时候可以指定其名称,假如指定的文件名称为:id_gitee_rsa
。
我们在当前用户目录的 .ssh 目录下面可以执行 ls 命令可以查看:
1 | ls -la ~/.ssh/ |
bash 窗口显示如下:
1 | drwx------ 2 www www 4096 May 29 14:51 . |
切换SHH KEY
SSH 默认只会读取当前用户目录下 ~/.ssh/id_rsa
的数据,如果我们不切换 ssh key,假如我们在 github 或者 gitee 配置的是id_gitee_rsa
的公钥,当 push 代码的时候回有如下错误提示:
1 | Access deined: DeployKey does not support push code |
所以,为了让 ssh 能识别其他私钥,需要将其添加到 ssh agent:
1 | ssh-add ~/.ssh/id_gitee_rsa |
如果ssh-add
过程报错:Could not open a connection to your authentication agent.
。则需要先执行bash
代理。
1 | ssh-agent bash |
执行上面的代理配置命令后,再次执行 ssh-add ~/.ssh/id_gitee_rsa
命令将其添加到 ssh 代理中。需要注意的是,如果在生成私钥的过程中输入了密码,那么该操作就需要再次输入密码授权。
1 | Enter passphrase for /home/www/.ssh/id_gitee_rsa: |
如果出现上面的信息,则需要输入密码。输入密码无误,则切换成功后,会显示如下信息:
1 | dentity added: /home/www/.ssh/id_gitee_rsa (/home/www/.ssh/id_gitee_rsa) |
PUSH 代码
当 ssh key 切换成功之后,我们再次推送代码到我们的代码仓库,发现已经没有原来的错误了:
1 | $ git push |