前言

在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. c#图片的平移与旋转

    1新建文件夹,添加一个图片 2 添加控件 两个button控件 一个image控件 一个Canvas控件 3 代码实现 using System;using System.Collections.Ge ...

  2. jquery EasyUi 添加节点、展开所有节点、默认选中第一个节点

    感觉easyUi 的树用起来不如 Ext 的树方便,首先,root节点不太好自定义, 异步加载时,只能通过后台判断生成root节点,但是这样一来有一个问题,就是第一次访问界面时, 树的初始化比较慢,大 ...

  3. Go中的fmt几种输出的区别和格式化方式

    在日常使用fmt包的过程中,各种眼花缭乱的print是否让你莫名的不知所措呢,更让你茫然的是各种格式化的占位符..简直就是噩梦.今天就让我们来征服格式化输出,做一个会输出的Goer. fmt.Prin ...

  4. Kubernetes 服务发现

    目录 什么是服务发现? 环境变量 DNS 服务 Linux 中 DNS 查询原理 Kubernetes 中 DNS 查询原理 调试 DNS 服务 存根域及上游 DNS 什么是服务发现? 服务发现就是一 ...

  5. (二十)c#Winform自定义控件-有后退的窗体

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...

  6. 初学html总结

    2019-08-17 17:58:49 html:超文本标记语言,用于网页结构的搭建 html语言构成:由标签.属性.属性值构成 标签:" < "后面第一个单词 属性:标签后 ...

  7. Java函数式编程原理以及应用

    一. 函数式编程 Java8所有的新特性基本基于函数式编程的思想,函数式编程的带来,给Java注入了新鲜的活力. 下面来近距离观察一下函数式编程的几个特点: 函数可以作为变量.参数.返回值和数据类型. ...

  8. json模块和pickle模块

    json模块和pickle模块 一.json模块 作用:用python写了一个程序,用java写了一门程序,这两个程序需要数据之间交流,就产生了一种多种语言通用的数据类型,json串. 序列化:把对象 ...

  9. 我是如何学习写一个操作系统(二):操作系统的启动之Bootloader

    前言 今天本来的任务看书和把之前写的FragileOS整理一下,但是到现在还在摸鱼,书也只看一点.后来整理了一下写这个系列的思路,原本的目的是对操作系统原理性的学习和对之前写的一个玩具型操作系统的回顾 ...

  10. win server 2008搭建域环境

    0x00 简介 1.域控:win server 2008 2.域内服务器:win server 2008.win server 2003 3.域内PC:win7 x64.win7 x32.win xp ...