考虑到安全性和便捷性,相信大部分同学都已经习惯了 SSH key 登录这种方式。有时候我们需要针对不同主机使用不同的 key,甚至针对同一个主机使用不同的 key,都可以通过 ~/.ssh/config 这个配置文件来实现。
默认情况下,ssh 会使用 ~/.ssh/id_rsa。这里,我通过 ssh-keygen 命令生成另外一个 key 用于 git.imququ.com 这个我自建的 gitlab 服务:
BASHcd ~/.ssh/
ssh-keygen -t rsa -C "quguangyu@gmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/QuQu/.ssh/id_rsa): id_rsa_gitlab
...
接下来将 id_rsa_gitlab.pub 这个公钥文件内容添加到 gitlab 的后台(Mac 下可以使用 pbcopy 这个命令复制内容到剪切板,避免出现格式问题)。
pbcopy < id_rsa_gitlab.pub
现在我们来 git clone 项目试试:
BASHgit clone git@git.imququ.com:qgy18/ququblog2.git
Cloning into 'ququblog2'...
Permission denied (publickey).
fatal: Could not read from remote repository.
显然,提示没有权限。因为默认 ssh 根本不认我刚刚生成的 id_rsa_gitlab 这个私钥。我们需要做的是告诉 ssh 要用另外的 key 登录,打开 ~/.ssh/config(没有就新建一个),输入以下内容:
BASH#gitlab@ququ
Host git.ququ
HostName git.imququ.com
Port 22
User git
IdentityFile ~/.ssh/id_rsa_gitlab
第一行是注释,第二行是指定如果 Host 匹配上了 git.ququ,就使用接下来几行指定的配置登录 ssh。HostName、Port、User、IdentityFile 分别是具体的主机、端口、用户名和私钥 key 的配置。需要注意的是 Host 可以跟 HostName 一样,也可以定义为你想要的任何内容,所以通常我用一个好记的短名称作为 Host。
将之前的「git@git.imququ.com」替换为「git.ququ」再来试试:
BASHgit clone git.ququ:qgy18/ququblog2.git
Cloning into 'ququblog2'...
remote: Counting objects: 1360, done.
嗯,这样就没问题了。同样,如果要给同一个主机指定不同的 key 文件也很简单:
BASHHost host1
HostName www.xxx.com
User xx
IdentityFile ~/.ssh/id_rsa_1
Host host2
HostName www.xxx.com
User xx
IdentityFile ~/.ssh/id_rsa_2
这样全局任何地方通过 host1、host2 登录 ssh 时,都会自动选择不同的 key 文件。
所以,通过 ssh 的 config 文件可以进一步简化登录过程。实际上我可以通过「ssh q」登录我的 VPS;配置 SFTP 等服务时,也只用在 host 那一栏填一个「q」,用户名、端口什么的都不用填。因为我有这样的配置:
BASHHost q
HostName www.imququ.com
Port 22
User jerry
IdentityFile ~/.ssh/id_rsa
由于参数是集中配置的,如果某天我要更换 ssh 服务的端口,只需要在这里改一次就可以了,十分方便。实际上,ssh config 的 Host 字段还支持通配符,有更高级的玩法,不过我暂时没这复杂的需求。这里有一份完整文档,以后有需要再研究。
本文链接:https://imququ.com/post/multiple-ssh-keys-with-different-hosts.html,参与评论。
--EOF--
转自:https://imququ.com/post/multiple-ssh-keys-with-different-hosts.html
相关推荐
SSH_Test.rar_C ssh_C#ssh_C++ ssh_C++ SSH_libssh2库是一个针对C、C#和C++编程语言的SSH实现示例,特别提到了libssh2库的使用。在Visual Studio 2010环境下,这个压缩包提供了通过SSH进行文件上传的功能。接下来,...
快速编写的C#应用程序,使您可以针对主机或主机列表运行SSH命令。 以.NET 4.0主机为目标,在Win10 +上应该可以正常工作,但请确保任何早期版本中都存在正确的.NET版本。 用法 Execute a command using a ...
- **命令执行**:用户可以通过SSH通道执行远程主机上的命令或脚本。 2. **无实例化SSH操作** 在某些情况下,我们可能只需要执行一个简单的命令而不需要保持整个SSH会话。例如,我们可能想要远程重启一个服务,...
`laravel-ssh-tunnel-fixed`是针对Laravel和Lumen开发的一个扩展,它专门用于建立和管理SSH隧道,这对于远程服务器的管理和部署特别有用。 SSH(Secure Shell)隧道是一种安全的网络协议,可以加密通信并提供对远程...
3. **文件传输**:除了基本的命令行交互,F-Secure SSH Client还支持Secure Copy (SCP) 和 Secure File Transfer Protocol (SFTP),使得用户能够安全地在本地和远程主机之间传输文件,这对于系统管理员进行远程维护...
在本文中,我们将讨论如何在群晖NAS上运行的Docker容器中启用SSH服务,特别是针对CentOS容器。 首先,我们需要理解Docker的基本概念。Docker的设计目标是使每个容器专注于运行单个进程,以实现更好的资源隔离和效率...
- **ssh_host_*_key.pub**:这些是服务器主机密钥的公钥文件,用于验证客户端连接到的是正确的服务器,防止中间人攻击。 - ssh_host_ed25519_key.pub:使用Ed25519算法的公钥。 - ssh_host_dsa_key.pub:使用DSA...
《SecureCRT 7.3:SSH工具的强大与安全使用指南》 SecureCRT是一款广泛应用于IT领域的强大终端模拟软件,尤其在远程登录、网络设备管理、系统运维等方面具有重要作用。其7.3版本更是因其稳定性和丰富的功能而备受...
在本文中,我们将深入探讨如何使用Node.js中的SSH2客户端模块进行远程服务器操作,特别是针对“node-ssh-test”项目。这个项目是一个测试环境,旨在帮助开发者熟悉和调试使用SSH2库进行节点SSH连接的方式。 首先,...
《使用Ansible在Debian系统中管理SSH密钥》 Ansible是一款强大的自动化运维工具,它简化了在多台服务器上部署、配置和管理任务的过程。在这个场景中,我们关注的是一个特定的Ansible角色——"ansible-ssh-keys",这...
ssh_host_dsa_key - /etc/ssh/ 主机 dsa 密钥。 ssh_host_rsa_key - /etc/ssh/ 主机 rsa 密钥。 ssh_key - 在 /etc/ 中名为“ssh_key”的奇怪文件,它对两个德国机器进行身份验证。 见演示。 ###./ssl_keys:从...
- **针对单个主机**:直接在目标主机上通过SSH密钥认证方式建立连接。 - **针对多个主机**: - 修改`/etc/ansible/ansible.cfg`文件中的`host_key_checking`设置为`False`。 - 这样做可以避免Ansible在连接时...
9. **安全检查**:升级后,务必进行安全审计,确保所有设置符合最佳实践,并使用`ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_key.pub`等命令检查主机密钥的完整性。 10. **更新防火墙规则**:如果系统中启用了...
1. **手动删除已知主机记录**:如问题描述中所示,可以登录到Ansible控制端服务器,打开用户的`.ssh/known_hosts`文件,使用文本编辑器(如`vi`或`nano`)找到并删除对应的IP记录。保存文件后,Ansible在下次执行时...
"Key Manager 开源项目"是一个专门针对SSH密钥管理和分发的解决方案,旨在解决在多主机环境中手动管理密钥的繁琐任务。这个项目的核心目标是实现一个中心化的、安全的密钥管理系统,使得用户能够方便地进行单点登录...
本文将详细介绍如何在CentOS操作系统中搭建Git服务器以及如何通过SSH密钥实现安全连接,特别是针对Windows客户端的配置。 首先,我们需要在CentOS服务器上安装Git。可以通过`yum`包管理器来完成这一任务,执行`yum ...
- **Playbook**: Playbook 是一种 YAML 格式的文件,用于定义一系列的任务序列,可以针对不同的主机或主机组执行不同的任务。通过这种方式,可以实现更加复杂的自动化操作。 #### 五、Playbook 的高级功能 - **...
5. **puttytel.exe**:这是一个纯文本的 Telnet 客户端,不包含SSH功能,主要用于连接使用Telnet协议的远程主机。 6. **puttygen.exe**:PuTTY Key Generator,用于创建、导入和管理SSH密钥对。用户可以生成公钥和...
用户需要针对服务进行身份验证(通过OAuth2访问令牌) 用户请求对特定主机的临时SSH访问( POST /access-requests ) 该服务通过检查主机名是否遵循给定的模式( HTTP_ALLOWED_HOSTNAME_TEMPLATE )来检查是否允许...
- 使用Telnet登录现网主机,避免因SSH升级导致的中断。 - 将备份的配置文件上传到现网主机,并应用到新版本的OpenSSH中。 - 停止SSH服务,进行升级。 - 通过4A平台验证SSH登录是否成功。如失败,检查配置差异并...