前言

在ansible的官方文档中,提到了强烈推荐用ssh-agent来管理密钥

究竟ssh-agent是什么,它有什么用法呢,下面来一探究竟。

ssh-agent是什么?用处是什么?

ssh-agent是什么?

ssh-agent是一个代理程序,它能帮助我们管理我们的私钥。


ssh-agent在哪里用得到?

  1. 当我们的主机有多个密钥对(例如:root用户生成了一对公钥私钥对,hmk用户生成了另外一对公钥私钥对),我们连接到其他不同的多台主机时,可能用的认证用户不一样,这时候需要我们手动指定使用哪个密钥,一旦机器过多输入会非常繁琐,ssh-agent能帮我们管理这些密钥对
  2. 当我们给私钥加了密码,而我们的认证方式又选择了密钥认证,ssh-agent可以帮助我们免去输入密码的繁琐操作

ssh-agent的启动

启动ssh-agent有两种命令:

 ssh-agent $SHELL
eval `ssh-agent`

第一条命令:ssh-agent $SHELL

它会在当前的shell(笔者的shell为bash)中启动一个子shell,ssh-agent程序运行在这个子shell中,在centos中,$SEHLL就是bash,所以这个命令可以写为ssh-agent bash,我们可以用pstree命令来查看进程树验证(找不到pstree命令可以用yum -y install psmisc安装)。

执行命令前:

执行命令后:

在当前会话中,我们已经进入到了子shell里了,ssh-agent也运行在这里,我们可以退出当前的子shell,ssh-agent会随之消失。

第二条命令:

 eval `ssh-agent`

它会直接开启一个ssh-agent进程:

因为它是独立进程,所以即使我们退出当前shell连接,它依然存在,所以,我们最好在退出前用命令ssh-agent k关闭它。当然,这种方式同样适用于第一种开启了的ssh-agent程序。如果我们意外断开了连接,再连接的时候用ssh-agent k是无法关闭它的:

这个时候很简单,用ps -ef|grep ssh-agent找到对应的agent程序,用kill pid号来杀死进程即可。

ssh-agent添加密钥

使用前面的步骤开启了ssh-agent后,可以用ssh-add /root/.ssh/id_rsa命令添加密钥了,注意:如果没有开启ssh-agent,你会看到这个报错

此时需要用第一步的方法开启ssh-agent

ssh-agent管理多个私钥

首先,我们需要生成多对密钥,方法可以参考我前面的博客[https://www.cnblogs.com/huangmengke/p/11497740.html],首先,生成一个非默认名字的私钥:

然后用这个来做免密登录到其他机器的认证:

然后,我们来“免密”登录试试:

WTF???不是免密了吗?这是因为ssh的密钥认证默认使用/.ssh/id_rsa进行认证,如果你使用非默认的密钥认证,需要手动指定你的私钥文件,因为你发给172.16.101.251的公钥和251问你的/.ssh/id_rsa不匹配,所以需要问你输入密码,正确的认证方式通过-i指定私钥文件:

以上只是以一个私钥举例子,当我们需要连接N台主机,而且使用不同的密钥来认证,每次需要手动指定私钥,会极其繁琐,这时ssh-agent就可以帮忙了~

ssh-agent避免输入私钥密码

首先,设置ssh的私钥/root/.ssh/id_rsa_hmk1 和私钥密码123456:

同样的步骤做密钥验证,最后会提示我们输入密钥的密码:

这样的话,每次我们用密钥认证登录,都要求我们输入密码,非常的麻烦,ssh-agent可以帮助我们管理密钥。在一个ssh会话中,只要输入一次私钥密码,在同一ssh会话中之后再次使用到相同的私钥时,可以不用再次输入对应密码,示例如下:

ssh-agent管理密钥的其它命令

查看ssh-agent已经添加的私钥:

 ssh-add -l

示例:

查看ssh-agent已经添加的私钥对应的公钥:

  ssh-add -L

示例:

删除指定的私钥

  ssh-add -d 私钥文件

示例:

删除所有私钥

  ssh-add -D

类比总结

host1:二叔所在的公司

私钥:我的私人财产-电脑

私钥密码:开机密码

公钥:我的个人名片

host2:胖虎公司(胖虎是笔者的朋友)

认证文件:收到二叔的名片,去geo找他,通过私钥验证身份

我copy公钥--->全世界撒名片,这个我自己来,不让管家胖虎干,毕竟刷脸

添加代理agent--->管家胖虎代为管理我的私人财产-电脑,和进入电脑的开机密码;我有N台电脑和密码,只给胖虎管一台或几台,不满意他的表现可以随时不让管家管理,不过这样接洽外部会变得非常麻烦。

所以,ssh-agent,你学会了吗?

ssh-agent代理的简单用法的更多相关文章

  1. ssh转发代理:ssh-agent用法详解

    SSH系列文章: SSH基础:SSH和SSH服务 SSH转发代理:ssh-agent用法详解 SSH隧道:端口转发功能详解 使用ssh-agent之前 使用ssh公钥认证的方式可以免去ssh客户端(如 ...

  2. EMCA和EMCTL的简单用法

    背景 其实这两个完全是两回事,不过倒是有关系,emca就是建立的资料库,建立后就用emctl来管理服务了.oem有问题基本都是重建emca,然后用emctl来操作. 当时用emca感觉真是一阵空白,太 ...

  3. shell expect的简单用法【转】

    用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下:  ######## ...

  4. 用PROXYCHAINS实现SSH全局代理

    NUX下可以实现SSH全局代理的软件有tsocks和proxychains两种,但是个人感觉proxychains要更加稳定简单. $ yum install proxychains # vim /e ...

  5. SSH agent 的使用 - 资料摘录

    下面是一些ssh agent的资料简要摘录,网路上的相关的文章已经很多了: ssh 推荐的登录方式是使用私钥登录.但是如果生成私钥的时候,设置了口令(passphrase),每次登录时需要输入口令也很 ...

  6. Charles的简单用法

    Charles的简单用法 一.抓电脑上 http 包 二.显示请求的 Request 和 Response 三.抓取电脑上 https 包 1.安装根证书 2.在钥匙串中启用根证书 3.配置哪些需要抓 ...

  7. CATransition(os开发之画面切换) 的简单用法

    CATransition 的简单用法 //引进CATransition 时要添加包“QuartzCore.framework”,然后引进“#import <QuartzCore/QuartzCo ...

  8. jquery.validate.js 表单验证简单用法

    引入jquery.validate.js插件以及Jquery,在最后加上这个插件的方法名来引用.$('form').validate(); <!DOCTYPE html PUBLIC " ...

  9. NSCharacterSet 简单用法

    NSCharacterSet 简单用法 NSCharacterSet其实是许多字符或者数字或者符号的组合,在网络处理的时候会用到 NSMutableCharacterSet *base = [NSMu ...

随机推荐

  1. jmeter使用JDBC连接数据库

    jmeter使用JDBC的配置元件连接数据库,通过sql语句查询需用到的数据 配置元件名称:JDBC connection configuration,使用前,需导入mysql-connector-j ...

  2. javascript中的浅拷贝和深拷贝(拷贝引用和拷贝实例)

    作者:千锋教育链接:https://www.zhihu.com/question/23031215/answer/326129003来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  3. IDEA运行报错: Maven编译错误:不再支持源选项 5。请使用 6 或更高版本

    这里 记录下 这个问题的解决方案: 1:修改maven settings.xml 中的数据 这里的版本要对应现在使用的jdk版本 2:检查idea 配置 图中2块区域要一致 检查这块地方对应了自己的j ...

  4. 集成方法 Ensemble

    一.bagging 用于基础模型复杂.容易过拟合的情况,用来减小 variance(比如决策树).基础模型之间没有太多联系(相对于boosting),训练可以并行.但用 bagging 并不能有助于把 ...

  5. Android Bluetooth Low Energy (BLE)简单方便的蓝牙开源库——EasyBLE

    源码传送门 最新版本 功能 支持多设备同时连接 支持广播包解析 支持连接同时配对 支持搜索系统已连接设备 支持搜索器设置 支持自定义搜索过滤条件 支持自动重连.最大重连次数限制.直接重连或搜索到设备再 ...

  6. 高速开车换底盘记:Windows 与 Linux 部署都抗住了,但修车任务艰巨

    抱歉,又是一篇流水账,在排查问题的焦头烂额中写博客的确是一个挑战,望大家见谅. 今天园友溪源More发了一篇博文博客园翻车启示录,而翻车之后的最新进展是——昨天下午我们又把 .net core 引擎的 ...

  7. https理论及实践

    什么是https协议? http协议以明文的方式在网络中传输,安全性难以保证,https在http协议的基础上加入SSL/TLS层.TLS是SSL协议的最新版本,SSL使用SSL数字证书在通信两端建立 ...

  8. MySQL高可用架构:mysql+keepalived实现

    系统环境及架构 #主机名 系统版本 mysql版本 ip地址 mysqlMaster <a href="https://www.linuxprobe.com/" title= ...

  9. Redis之对象篇——Redis对象系统简介

    Redis之对象篇--Redis对象系统简介 前言     之前几篇文章,简单介绍 Redis用到的所有主要数据结构,简单动态字符串(SDS).双端链表.字典.压缩列表.整数集合.跳跃表. 图解Red ...

  10. 【win10主机】连接virtualbox上【32位winXP系统虚拟机】上启动的mysql

    问题Q: 在virtualbox上启动winXP系统虚拟机后,启动含oa项目的tomcat,数据库服务也运行起来了,虚拟机上连接无误: 在上一篇<主机访问 虚拟机启动的项目>基础上,尝试连 ...