多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

原文首发:《虚怀若谷

目录
相关文章
|
10天前
|
监控 Linux Shell
Rsync 基于 SSH 同步
Rsync 实时同步配置
29 3
|
1月前
|
安全 Linux 网络安全
Docker部署ssh连接工具webssh2
【8月更文挑战第2天】Docker部署ssh连接工具webssh2
81 6
Docker部署ssh连接工具webssh2
|
21天前
|
安全 网络协议 Shell
Github代码仓库SSH配置流程
这篇文章是关于如何配置SSH以安全地连接到GitHub代码仓库的详细指南,包括使用一键脚本简化配置过程、生成SSH密钥对、添加密钥到SSH代理、将公钥添加到GitHub账户以及测试SSH连接的步骤。
30 0
Github代码仓库SSH配置流程
|
27天前
|
网络安全 开发工具 git
拉取 gitee 代码,配置SSH,Please make sure you have the correct access rights
拉取 gitee 代码,配置SSH,Please make sure you have the correct access rights
30 1
|
1月前
|
运维 安全 网络安全
"革新远程访问体验:Docker化部署webssh2,一键启动Web SSH客户端,让远程管理如虎添翼!"
【8月更文挑战第2天】Docker作为软件开发与运维的关键工具,以其轻量级、可移植及强隔离特性简化了应用部署。结合webssh2这一开源Web SSH客户端,可通过浏览器安全便捷地访问SSH服务器,无需额外软件。首先确保已安装Docker,接着拉取webssh2镜像并运行容器,映射端口以便外部访问。配置好SSH服务器后,通过浏览器访问指定URL即可开始SSH会话。此方案不仅提升了用户体验,还加强了访问控制与系统安全。
91 7
|
4月前
|
安全 网络安全
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> 如何处理
211 1
|
4月前
|
算法 网络安全
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> 解决
192 7
|
4月前
|
Devops jenkins 网络安全
【DevOps】(四)jekins服务器ssh部署
【DevOps】(四)jekins服务器ssh部署
44 1
|
4月前
|
弹性计算 运维 Shell
基于key验证多主机ssh访问
【4月更文挑战第30天】
55 1
|
4月前
|
存储 Java API
入职之后发现代码居然是祖传代码肿么办?(SSH->微服务)
入职之后发现代码居然是祖传代码肿么办?(SSH->微服务)