ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SSH-Agent实现多台机器登陆

2021-04-25 12:06:46  阅读:191  来源: 互联网

标签:server2 多台 Agent agent server1 add SSH root ssh


学习过程中,我们大概会用到不超过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通常为shell

eval `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 server2
Last login: Mon Nov 26 09:36:44 2018 from server1

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

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


[root@server3 ~]# ssh server2
root@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-agent
root     24338  0.0  0.0  51416   580 ?        Ss   02:43   0:00 ssh-agent
root     24388  0.0  0.0  51416  1032 ?        Ss   02:44   0:00 ssh-agent bash

  • 添加私钥:
[root@server1 ~]# ssh-add ~/.ssh/id_rsa
Identity 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/sh

if [ -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

 fi

else

 echo "Starting ssh-agent..."

 eval `ssh-agent |tee ~/.agent.env`

 ssh-add

fi

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

标签:server2,多台,Agent,agent,server1,add,SSH,root,ssh
来源: https://blog.51cto.com/u_10272167/2730775

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有