多SSH KEY切换部署同步代码

简介: 一般情况下,我们会单独生成一个ssh-key公钥用于备份数据,而不是和其他公钥混合使用,避免因为因为某些操作不安全,造成代码丢失。当然你也可以选择一个其他账户操作也是可以的,但如果选择其他账户了,也就没有这篇文章的存在了。还是回到多个私钥的问题上,默认情况下,RSA算法的 ssh 私钥文件名为 id_rsa,我们可以通过ssh-keygen生成 ssh key 的时候可以指定其名称。当有多个SSH KEY存在的时候,如何指定某个ssh读取某个私钥呢?本文就提供一个解决方案。

需求场景

大部分开发者个人的代码基本都同步在代码托管平台管理,业内著名的有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 命令可以查看:

ls -la ~/.ssh/

bash 窗口显示如下:

drwx------ 2 www www 4096 May 29 14:51 .
drwxr-xr-x 5 www www 4096 Jun 28 18:53 ..
-rw------- 1 www www 1766 May 29 14:51 id_gitee_rsa
-rw-r--r-- 1 www www  398 May 29 14:51 id_gitee_rsa.pub
-rw------- 1 www www 1679 Oct 26  2018 id_rsa
-rw-r--r-- 1 www www  399 Oct 26  2018 id_rsa.pub
-rw-r--r-- 1 www www  666 Nov 14 14:39 known_hosts

切换SHH KEY

SSH 默认只会读取当前用户目录下 ~/.ssh/id_rsa 的数据,如果我们不切换 ssh key,假如我们在 github 或者 gitee 配置的是id_gitee_rsa的公钥,当 push 代码的时候回有如下错误提示:

ssh-error.png

Access deined: DeployKey does not support push code
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

所以,为了让 ssh 能识别其他私钥,需要将其添加到 ssh agent:

ssh-add ~/.ssh/id_gitee_rsa

如果ssh-add过程报错:Could not open a connection to your authentication agent.。则需要先执行bash代理。

ssh-agent bash

执行上面的代理配置命令后,再次执行 ssh-add ~/.ssh/id_gitee_rsa命令将其添加到 ssh 代理中。需要注意的是,如果在生成私钥的过程中输入了密码,那么该操作就需要再次输入密码授权。

Enter passphrase for /home/www/.ssh/id_gitee_rsa: 

如果出现上面的信息,则需要输入密码。输入密码无误,则切换成功后,会显示如下信息:

dentity added: /home/www/.ssh/id_gitee_rsa (/home/www/.ssh/id_gitee_rsa)

PUSH 代码

当 ssh key 切换成功之后,我们再次推送代码到我们的代码仓库,发现已经没有原来的错误了:

$ git push
Counting objects: 4098, done.
Compressing objects: 100% (3944/3944), done.
Writing objects: 100% (4098/4098), 40.11 MiB | 132.00 KiB/s, done.
Total 4098 (delta 941), reused 0 (delta 0)
remote: Resolving deltas: 100% (941/941), completed with 727 local objects.
remote: Powered by GITEE.COM [GNK-3.8]
To git@gitee.com:joyven/xxx.git
   6893b33..85b567d4  master -> master

原文首发:《虚怀若谷

目录
相关文章
|
2月前
|
移动开发 监控 安全
通过SSH协议实现的屏幕局域网电脑监控:屏幕安全访问代码
随着科技的不断发展,网络安全问题愈发突出。为了确保屏幕数据的安全,我们需要一种高效可靠的监控方法。本文介绍了一种基于SSH协议的屏幕局域网电脑监控方案,同时提供了相关代码示例,确保屏幕数据的安全传输和访问。
263 0
|
2月前
|
Devops 网络安全 Docker
百度搜索:蓝易云【DevOps系列文章之Docker部署web ssh工具sshwifty教程。】
同时,了解DevOps和Docker的基本原理和概念也对你进行部署和管理这样的工具非常有帮助。你可以进一步研究Docker容器化技术和相关的DevOps实践,以更好地理解和应用这些概念。
71 0
|
2月前
|
安全 网络安全
jsch 报错 no matching host key type found. Their offer: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha> 如何处理
【5月更文挑战第24天】jsch 报错 no matching host key type found. Their offer: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha> 如何处理
162 1
|
2月前
|
算法 网络安全
Unable to negotiate with 127.0.0.1 port 29215: no matching host key type found. Their offer: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha> 解决
【5月更文挑战第5天】Unable to negotiate with 127.0.0.1 port 29215: no matching host key type found. Their offer: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha> 解决
108 7
|
2月前
|
Devops jenkins 网络安全
【DevOps】(四)jekins服务器ssh部署
【DevOps】(四)jekins服务器ssh部署
36 1
|
2月前
|
弹性计算 运维 Shell
基于key验证多主机ssh访问
【4月更文挑战第30天】
33 1
|
2月前
|
存储 Java API
入职之后发现代码居然是祖传代码肿么办?(SSH->微服务)
入职之后发现代码居然是祖传代码肿么办?(SSH->微服务)
|
2月前
|
安全 网络安全
jsch 报错 no matching host key type found. Their offer: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha>问题处理方法
【5月更文挑战第10天】jsch 报错 no matching host key type found. Their offer: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha>问题处理方法
161 0
|
2月前
|
算法 网络安全
no matching host key type found. Their offer: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha> 问题解决
【5月更文挑战第8天】no matching host key type found. Their offer: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha> 问题解决
50 0
|
2月前
|
存储 弹性计算 算法
SSH学习(三)- SSH协议中的Public Key Algorithm
在SSH协议中,有两个地方涉及到公钥算法,分别是: 1. 服务端认证:服务端在进行密钥协商的时候证明自己身份,防止中间人攻击,此时为SSH-TRANS协议发生的事情; 2. 客户端认证:客户端通过PublicKey方式证明自己身份,完成SSH登录认证,此时SSH-USERAUTH发生的事情; 这两种情况下的公钥算法使用的是同一个概念,接下来本文将主要基于PublicKey公钥认证方式,学习对应的内容。
161 1
SSH学习(三)- SSH协议中的Public Key Algorithm