学习过程中,我们大概会用到不超过10台的机器,互相复制公钥到对方机器上的authorized_keys文件中即可,这样就实现了免秘钥登陆。

但在生产环境下,可能有成百上千台机器,这种情况下去互相复制公钥显然不太现实。不过我们可以使用 ssh-agent 来实现多台机器的ssh登陆。


ssh-agent

ssh-agent (ssh代理)是一种控制用来保存公钥身份验证所使用的私钥的程序。

ssh-agent 是一个密钥管理器,运行ssh-agent以后,使用 ssh-add 将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程。

首先,如果想要使用 ssh-agent ,我们需要先启动它:

两种启动方式都可以

ssh-agent $SHELL        #centos中,默认shell通常为shelleval `ssh-agent`

而且也不需要另外安装软件,系统默认就有该命令:

[root@server1 ~]# ls /usr/bin/ssh-add /usr/bin/ssh-add[root@server1 ~]# ls /usr/bin/ssh-agent /usr/bin/ssh-agent


ssh-add

ssh-agent 是管理多个ssh key的代理,受管理的私钥通过 ssh-add 来添加,目的是对解密的私钥进行高速缓存。

参数:

-D:删除ssh-agent中的所有密钥-d:从ssh-agent中的删除密钥-e pkcs11:删除PKCS#11共享库pkcs1提供的钥匙-s pkcs11:添加PKCS#11共享库pkcs1提供的钥匙-L:显示ssh-agent中的公钥-l:显示ssh-agent中的密钥-t life:对加载的密钥设置超时时间,超时ssh-agent将自动卸载密钥-X:对ssh-agent进行解锁 -x:对ssh-agent进行加锁

  • 把专有密钥添加到 ssh-agent 中
ssh-add ~./ssh/id_dsa

  • 从 ssh-agent 中删除密钥
ssh-add -d ./ssh/id_xxx.pub

  • 查看 ssh-agent 中的密钥
ssh-add -l


举例

现在有server1、server2、server3三台机器,其中server1已经可以免秘钥登陆server2和server3,但server2和server3之间无法通过ssh登陆。

[root@server1 ~]# ssh server2Last login: Mon Nov 26 09:36:44 2018 from server1

[root@server1 ~]# ssh server3Last login: Mon Nov 26 09:37:25 2018 from server1

[root@server2 ~]# ssh server3root@server3's password:            #提示密码登陆[root@server3 ~]# ssh server2root@server2's password:            #提示密码登陆

  • 编辑配置文件:
[root@server1 ~]# vim /etc/ssh/sshd_config         #做下面更改AllowAgentForwarding yes

  • 启动 ssh-agent 服务:
[root@server2 ~]# ssh-agent bash[root@server1 ~]# ps aux |grep ssh-agentroot     24338  0.0  0.0  51416   580 ?        Ss   02:43   0:00 ssh-agentroot     24388  0.0  0.0  51416  1032 ?        Ss   02:44   0:00 ssh-agent bash

  • 添加私钥:
[root@server1 ~]# ssh-add ~/.ssh/id_rsaIdentity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)

  • 测试登陆:
[root@server1 ~]# ssh -A server2          #这里 -A 不可省略,表示开启认证代理连接转发功能Last login: Mon Nov 26 09:36:58 2018 from server1[root@server2 ~]# ssh  server3            #后面这里 -A可以省略Last login: Mon Nov 26 09:37:28 2018 from server1[root@server3 ~]# logout Connection to server3 closed.[root@server2 ~]# logout Connection to server2 closed.

这样,通过 ssh-agent 就可以实现一台机器上直接登录多台机器,而不需要繁琐的输入密码及配置密钥的操作。

实际上,我们还需要一个脚本来实现 ssh-agent 的自动启动

[root@server1 ~]#cat /etc/profile.d/ssh-agent.sh#!/bin/shif [ -f ~/.agent.env ]; then. ~/.agent.env >/dev/null if ! kill -0 $SSH_AGENT_PID >/dev/null 2>&1; then  echo "Stale agent file found. Generating new agent..."   eval `ssh-agent |tee ~/.agent.env`  ssh-add fielse echo "Starting ssh-agent..." eval `ssh-agent |tee ~/.agent.env` ssh-addfi

这样就不会生成太多的 ssh-agent 程序了,以免每次打开 ssh-agent 都会产生新的进程。

©著作权归作者所有:来自51CTO博客作者80民工的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. PDF Password Remover 软件及其密钥
  2. ***技能:快速提取Windows密码和Wi-Fi密钥凭证
  3. 敏感数据的加密方案及实现
  4. Secrets&安全上下文约束(SCC):让我们重新认识OpenShift系列5
  5. nginx负载均衡搭建phpmyadmin加入redis了解session会话原理
  6. 【方法】Oracle用户密码含特殊字符时的登陆问题
  7. 信息安全第二篇(加密算法对比)
  8. 「小破站」真顶流,CMU语言技术研究所登陆B站:这是学术圈的新时尚?
  9. 邮件加密的第三道坎是密钥管理

随机推荐

  1. 如何在MySQL中得到两个值的最大值?
  2. mysql replace into 的使用情况
  3. Centos设置开机启动Apache和Mysql[总结]
  4. MySQL添加外键错误1215
  5. 如何在执行bash查询时,获得受影响的行数?
  6. SQL查询结果区分大小写
  7. 关于淘宝的数据库系统
  8. 如何将空值传递给外键字段?
  9. python3.x的torndb使用记录(发现网上没有
  10. mysql日志文件过大导致磁盘空间不够的问