`

针对不同主机使用不同 SSH Key

阅读更多

考虑到安全性和便捷性,相信大部分同学都已经习惯了 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

 

分享到:
评论

相关推荐

    sshiva:C#应用程序,可让您针对主机或主机列表快速运行SSH命令

    快速编写的C#应用​​程序,使您可以针对主机或主机列表运行SSH命令。 以.NET 4.0主机为目标,在Win10 +上应该可以正常工作,但请确保任何早期版本中都存在正确的.NET版本。 用法 Execute a command using a ...

    MoovMisManage:Moovbox 管理不善工具

    ssh_host_dsa_key - /etc/ssh/ 主机 dsa 密钥。 ssh_host_rsa_key - /etc/ssh/ 主机 rsa 密钥。 ssh_key - 在 /etc/ 中名为“ssh_key”的奇怪文件,它对两个德国机器进行身份验证。 见演示。 ###./ssl_keys:从...

    even:该项目不再有效维护

    用户需要针对服务进行身份验证(通过OAuth2访问令牌) 用户请求对特定主机的临时SSH访问( POST /access-requests ) 该服务通过检查主机名是否遵循给定的模式( HTTP_ALLOWED_HOSTNAME_TEMPLATE )来检查是否允许...

    fustercluck:使我的游戏集群变得有趣的所有事情

    针对新主机RaspberryPi运行new_host_init.yml 。 ansible-playbook --private-key [key file] -u pi playbooks/new_host_init.yml 为适当的节点类型运行剧本 如果一般添加新主机 创建ansible用户并将ansible密钥...

    terraform-aws-ec2-instance:用于配置通用EC2主机的Terraform模块

    terraform-aws-ec2-instance ... 注意:将${var.ssh_key_pair}私钥添加到ssh agent 。 将此存储库作为模块包含在现有terraform代码中。 简单的例子: module " instance " { source = " cloudposse/ec

    ansible-bootstrap

    ansible.cfg和hosts被配置为连接到一个使用默认配置(本地主机在端口 2222)运行的 Vagrant 服务器。 如果您使用的是 Vagrant 1.7 或更高版本,请按照说明更新ansible.cfg 中的private_file_key路径 用法 首先,在 ...

    CISCO交换机配置AAA、802.1X以及VACL

    一 启用AAA、禁用Telnet 以及启用 ssh 1.启用aaa身份验证,以进行SSH访问: Switch# conf t Switch(config)# aaa new-model 2.配置主机名 Switch(config)# hostname sw1 3.配置本地用户名口令,以便在带外...

    RouterOS2.9.6.with.crack及配置动画

    相反,对于长期使用P2P等软件的内网主机,系统将会减小它的带宽,使其对其他主机的影响降到最低。支持根据IP地址、协议、端口等信息对数据流进行优先级设置,然后针对不同类别的数据流进行带宽控制。指定主机或服务...

    网络安全设备技术要求.doc

    " " " " " "支持在首页多维度的展示发现的安全威胁,如僵尸主机、黑链风险、数据风险、外发异常流量等," " " " " "并支持将所有发现的安全问题进行归类汇总,并针对给出相应的解决方法指引,需提供设备首页配" " ...

    网络安全设备技术要求(1).doc

    " " " " " "支持在首页多维度的展示发现的安全威胁,如僵尸主机、黑链风险、数据风险、外发异常流量等," " " " " "并支持将所有发现的安全问题进行归类汇总,并针对给出相应的解决方法指引,需提供设备首页配" " ...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    linux.chm文档

    chmod g+s /home/public 设置一个目录的SGID 位 - 类似SUID ,不过这是针对目录的 chmod g-s /home/public 禁用一个目录的 SGID 位 chmod o+t /home/public 设置一个文件的 STIKY 位 - 只允许合法所有人删除文件 ...

Global site tag (gtag.js) - Google Analytics