ssh-agent代理的简单用法

前言

在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

怎么用ssh-agent,你学会了吗?

原文地址:https://www.cnblogs.com/huangmengke/p/11508431.html

时间: 2024-10-31 15:40:26

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

oc中代理的简单运用

今天和以为老同学聊了一些,深有感触,看它传值都是用代理写的,自己平时都是用block,通知之类的,基本不用代理,想想代理,感觉自己也有些模棱两可,所以动手写了一个代理简单运用的demo,写完之后思考了一番,在与block和通知做一些比较,豁然开朗,感觉自己在以后又多了一大助力. 我一贯的态度,做项目的思路源于基础,我不奢求自己什么都会,只要求自己学的都能基本掌握原理,从而达到心到,手到,运用自如. 关于代理之类的官方解释,我在此就不说了,不懂得,自己去查阅一些文档吧,这里只写它的原理和用法. 代

SSH反向代理

问题描述 很多人肯定碰到这样一个问题:自己办公室的电脑回家之后就没法通过家里的电脑远程连接过来了.除非通过拨通VPN或者其他方式先连接到公司内网.如果公司没有VPN,那么我们如何通过SSH连接到公司的电脑呢?这里我们可以使用SSH反向代理 实验环境 机器编号 IP 用户名 备注 A 172.16.206.131 aaa 目标服务器,在局域网中,可以访问 A B 10.10.10.206 bbb 代理服务器,在外网中,无法访问 A C 10.10.10.202 可以直接访问 B,无法直接访问 A

用PROXYCHAINS实现SSH全局代理

NUX下可以实现SSH全局代理的软件有tsocks和proxychains两种,但是个人感觉proxychains要更加稳定简单. $ yum install proxychains # vim /etc/proxychains.conf 要选 dynamic_chain,而不是random_chain和strict_chain.即注释掉strict_chain和random_chain那两行. 然后在最后的[ProxyList]下面添加: socks5 127.0.0.1 7070 PS:70

shell expect的简单用法【转】

用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下:  ##############################################  #!/usr/bin/expect  set timeout 30  spawn ssh -l username 192.168.1.1  expect "password:"  send "ispa

grep的简单用法

过滤root,就会把关于root的过滤出来,其他不匹配的就不会过滤[[email protected] sam]# grep 'root' passwdroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin 默认是有颜色显示的,在centos 6里面默认是不带颜色的[[email protected] sam]# which grepalias grep='grep --color=auto'/usr

iOS block-base 动画简单用法+关键帧动画设置线性变化速度的问题

本文转载至 http://www.tuicool.com/articles/aANBF3m 时间 2014-12-07 20:13:37  segmentfault-博客原文  http://segmentfault.com/blog/alan/1190000002411296 iOS的各种动画相漂亮,相信这是吸引很多人买iPhone的原因之一.不仅如此,这还是吸引我做iOS开发的一大原因,因为在iOS上给界面实现一些像样的动画实在是太轻松了! 这里就介绍一下iOS的block-based an

Android WIFI 简单用法

随着Wifi的普及,在开发App的时候对wifi的考虑越来越多了.例如程序的升级在wifi下可以省很多流量,在通信软件中的视频通话.可以实现高画质的传输等等,Android提供了WifiManager类来帮助开发者们管理Wifi.下面就简单来说一下WifiManager的简单用法把. 权限: 为了使用WfiManager 我们需要在Androidmanifest.xml 加入权限: //本例中使用了前两个.具体请按照需要添加权限. <uses-permission android:name=&quo

Android中资源文件中的字符串数组string-array简单用法

在Android中,用string-array是一种简单的提取XML资源文件数据的方法. 例子如下: 把相应的数据放到values文件夹的strings.xml文件里,或是其他自定义的xml中都可以,以下操作方法相同. <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="sports"> <item>足球<

expect简单用法

1 #!/usr/expect/bin/expect -f 2 3 4 set loginuser [lrange $argv 0 0] 5 set loginpass [lrange $argv 1 1] 6 set ipaddr [lrange $argv 2 2] 7 set port [lrange $argv 3 3] 8 set timeout [lrange $argv 4 4] 9 set from [lrange $argv 5 5] 10 set to [lrange $ar