SSH系列文章

SSH基础:SSH和SSH服务

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

SSH隧道:端口转发功能详解


使用ssh-agent之前

使用ssh公钥认证的方式可以免去ssh客户端(如ssh命令、xshell等)连接远端主机sshd时需要输入对方用户密码的问题。

但如果执行ssh命令所在的主机上保存了多套秘钥且将各公钥分发给了不同的远端主机,这时即使使用了公钥认证,也依然需要输入密码,因为ssh客户端不知道要读取哪个私钥去和该远端主机上的公钥配对。

看下面这张图描述的情况:

上面描述的情形是这样的:ssh客户端要管理web server群,还要管理mysql server群,ssh客户端要为这两个群内的主机使用不同的密钥对。例如要连接web server群内的主机,使用~/.ssh/id_rsa_1这一套秘钥,连接mysql server群内的主机,使用~/.ssh/id_rsa_2这一套秘钥。

于是,将id_rsa_1.pub分发给web server群内的每个主机,将id_rsa_2.pub分发给mysql server群内的每个主机:

$ ssh-copy-id -i ~/.ssh/id_rsa_1.pub root@webserver1
$ ssh-copy-id -i ~/.ssh/id_rsa_1.pub root@webserver2
$ ssh-copy-id -i ~/.ssh/id_rsa_1.pub root@webserver3
$ ssh-copy-id -i ~/.ssh/id_rsa_2.pub root@mysqlserver1
$ ssh-copy-id -i ~/.ssh/id_rsa_2.pub root@mysqlserver2
$ ssh-copy-id -i ~/.ssh/id_rsa_2.pub root@mysqlserver3

这一切进行的都很欢乐,但是一连接,发现还是要密码:

$ ssh root@webserver1
快输入 root@webserver's 密码:??? $ ssh root@mysqlserver1
快输入 root@mysqlserver's 密码:???

这是因为ssh客户端连接webserver1的时候,除了默认会读取的规范私钥文件id_rsa(或其它秘钥类型)外,不会自动读取任何一个文件,同理连接mysqlserver1也一样。

正确的连接方式是指定连接时使用哪个私钥去配对:

$ ssh -i ~/.ssh/id_rsa_1 root@webserver1
$ ssh -i ~/.ssh/id_rsa_2 root@mysqlserver1

好欢乐,终于连上了。但是真恶心,还要指定连接私钥。

不仅如此,如果私钥是加密(passphrase)的,指定私钥的时候还得输入这个passphrase密码。

ssh转发代理:ssh-agent用法详解的更多相关文章

  1. CentOS7下Firewall防火墙配置用法详解

    官方文档地址: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide ...

  2. linux curl用法详解

    linux ‍‍curl用法详解 ‍‍curl的应用方式,一是可以直接通过命令行工具,另一种是利用libcurl库做上层的开发.本篇主要总结一下命令行工具的http相关的应用, 尤其是http下载方面 ...

  3. Hadoop生态圈-zookeeper的API用法详解

    Hadoop生态圈-zookeeper的API用法详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.测试前准备 1>.开启集群 [yinzhengjie@s101 ~] ...

  4. Linux Shell脚本入门--wget 命令用法详解

    Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...

  5. UIWebView用法详解及代码分享

    今天我们来详细UIWebView用法.UIWebView是iOS内置的浏览器控件,可以浏览网页.打开文档等 能够加载html/htm.pdf.docx.txt等格式的文件. 用UIWebView我们就 ...

  6. Ext.Net学习笔记22:Ext.Net Tree 用法详解

    Ext.Net学习笔记22:Ext.Net Tree 用法详解 上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat=&q ...

  7. (转)linux traceroute命令参数及用法详解--linux跟踪路由命令

    linux traceroute命令参数及用法详解--linux跟踪路由命令 原文:http://blog.csdn.net/liyuan_669/article/details/25362505 通 ...

  8. Python中第三方库Requests库的高级用法详解

    Python中第三方库Requests库的高级用法详解 虽然Python的标准库中urllib2模块已经包含了平常我们使用的大多数功能,但是它的API使用起来让人实在感觉不好.它已经不适合现在的时代, ...

  9. python的requests用法详解

    Requests是一个Python语言写的http相关设置或者请求的一个库 安装:pip install Requests或者pip3 install requests 使用的时候要import re ...

随机推荐

  1. Nginx服务器 配置 https

    参考 这里 1. 购买证书 2. 补全信息 3. 下载证书( .pem + .key ) 4. 上传至服务器  /usr/local/nginx/conf/cert 下 5. 修改 nginx.con ...

  2. 关于js的页面高度和滚动条高度还有元素高度

    window.innerHeight    这是浏览器里面内容的高度,直接就是值,不需要其它操作; window.pageYOffset 这是滚动条到浏览器顶端的距离; $(元素).offset(). ...

  3. spring MVC 的MultipartFile转File读取

    转自:http://www.cnblogs.com/hahaxiaoyu/p/5102900.html 第一种方法:   MultipartFile file = xxx;         Commo ...

  4. Java 读取excel 文件流

    public static void initType(String path) { try { //1 获取excel文件流 excel xls 文件 暂不支持xlsx if (path.conta ...

  5. async/await 的理解

    1.如果一个方法标记了 async 关键字,那么这个方法被调用时就是异步执行: 2.利用Task运行一个任务,这个任务里的函数也是异步执行: 3.如果一个任务前被标记await,那么等待这个任务执行完 ...

  6. QEMU KVM Libvirt(12): Live Migration

    由于KVM的架构为 Libvirt –> qemu –> KVM 所以对于live migration有两种方式,一种是qemu + KVM自己的方式,一种是libvirt的方式,当然li ...

  7. 阿里分布式事务解决方案-GTS

    摘要: 本文将深入和大家探讨微服务架构下,分布式事务的各种解决方案,并重点为大家解读阿里巴巴提出的分布式事务解决方案----GTS.该方案中提到的GTS是全新一代解决微服务问题的分布式事务互联网中间件 ...

  8. Centos7 Nginx开机启动

    1.简易安装nginx: ./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf ...

  9. [Swift]LeetCode12. 整数转罗马数字 | Integer to Roman

    Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...

  10. [Swift]LeetCode725. 分隔链表 | Split Linked List in Parts

    Given a (singly) linked list with head node root, write a function to split the linked list into k c ...