expect实现配置机器信任关系

利用expect的交互功能,自动配置信任机器之间的信任关系。

代码里会判断机器是否生成了秘钥,如果没有生成过,则自动帮助你执行 ssh-keygen


  1 #!/bin/sh
2
3 expect_ssh_copy_id()
4 {
5 if [ "$#" -ne "5" ]; then
6 echo "expect_ssh_copy_id <remoteUser> <remoteHostname> <password> <localUserhome> <timeout>";
7 exit 1;
8 fi
9 local remoteUser=$1
10 local remoteHostname=$2
11 local password=$3
12 local localUserhome=$4
13 local timeout=$5
14
15 expect -c "
16 set timeout $timeout
17 spawn ssh-copy-id -i $localUserhome/.ssh/id_rsa.pub [email protected]$remoteHostname
18 expect {
19 \"*yes/no\" { send \"yes\r\"; exp_continue }
20 \"*assword:\" { send \"$password\r\" }
21 }
22 expect eof
23 "
24
25 }
26
27 expect_ssh_keygen()
28 {
29 if [ "$#" -ne "2" ]; then
30 echo "expect_ssh_keygen <localUserhome> <timeout>";
31 exit 1;
32 fi
33 local localUserhome=$1;
34 local timeout=$2;
35 if [ -f ${localUserhome}/.ssh/id_rsa.pub -a -f ${localUserhome}/.ssh/id_rsa ] ; then
36 echo "$(remoteHostname) is already create id_rsa.pub and id_rsa"
37 else
38 echo "$(remoteHostname) is not set id_rsa.pub and id_rsa.pub"
39 expect -c "
40 set timeout $timeout
41 spawn ssh-keygen
42 expect {
43 \"*save the key*id_rsa*\" {send \"\r\"; exp_continue }
44 \"*verwrite*y/n*\" { send \"y\r\"; exp_continue }
45 \"*passphrase*passphrase*\" { send \"\r\"; exp_continue }
46 \"*same passphrase*\" {send \"\r\" }
47 }
48 expect eof
49 exit 0
50 "
51 if [ "$?" -eq "0" ] ; then
52 echo "create id_rsa.pub,id_rsa successfully"
53 else
54 echo "create id_rsa.pub,id_rsa faild"
55 fi
56 fi
57
58 }
59 configure_trust_relation()
60 {
61 if [ "$#" -ne "5" ]; then
62 echo "configure_trust_relation <remoteUser> <remoteHostname> <password> <localUserhome> <timeout>";
63 exit 1;
64 fi
65 local remoteUser=$1
66 local remoteHostname=$2
67 local password=$3
68 local localUserhome=$4
69 local timeout=$5
70
71 expect -c "
72
73 set timeout $timeout
74 set trust true
75
76 #
77 # checking remote machine is be trusted
78 # if trust, return 0
79 # if not trust, return 1
80 #
81 spawn ssh [email protected]$remoteHostname
82
83 expect {
84 \"*yes/no\" { send \"yes\r\" ; exp_continue }
85 \"*assword:\" { send \"$password\r\" ; set trust false }
86 }
87
88 expect { *\$* }
89
90 send \"exit\r\"
91 sleep 1
92 if { \"\$trust\" == \"false\"} {
93 expect eof
94 exit 1
95 }
96 expect eof
97 exit 0
98 "
99 if [ "$?" -ne "0" ] ; then
100 echo "machine is not be trusted, then exec ssh-copy-id to remote machine"
101 expect_ssh_keygen $localUserhome $timeout
102 expect_ssh_copy_id $remoteUser $remoteHostname $password $localUserhome $timeout
103 else
104 echo "remote machine is be trusted"
105 fi
106 }
107
108 main()
109 {
110 which expect
111 if [ "$?" -ne "0" ]; then
112 echo "expect is not exists"
113 exit 1;
114 fi
115 remoteUser=chen;
116 remoteHostname=localhost;
117 password=chen;
118 localUserhome=$(cd ~;pwd;);
119 timeout=5;
120
121 configure_trust_relation $remoteUser $remoteHostname $password $localUserhome $timeout
122
127 }
128
129 main

expect实现配置机器信任关系,布布扣,bubuko.com

时间: 2024-11-05 14:55:54

expect实现配置机器信任关系的相关文章

ADFS 2.0 配置简介 PartⅡ – 配置 ADFS 信任关系

ADFS 与应用程序间的各种验证是基于信任关系的,在 ADFS 服务器配置好要信赖的应用程序(以 URL 为标识)后,应用程序再通过指定认证服务器来将用户引导至 ADFS 登录页,登录完成后再将用户的信息使用 Cookie 加密发送到应用程序完成验证. 我们来配置一个应用程序试试,为了方便就使用 ASP.NET MVC 吧. 一 .配置应用程序 建立 ASP.NET MVC 应用程序,一路默认. 安装一个 Visual Studio 扩展插件,能帮助我们省很多功夫,如果你不想太深入ADFS配置文

AIX主机信任关系配置

1.配置主机信任关系的时候,需要先在两台主机/etc/hosts文件中添加要信任主机的IP,假设有(192.168.8.190 aix190,192.168.8.191 aix191)2个主机,在191主机配置如下所示 192.168.8.190 aix190 2.如果系统配置DNS,则需要去/etc/resolv.conf文件查看解析服务器,并检查域名服务器是否正常工作,如果不是正常工作,则需要删除/etc/resolv.conf这个文件 3.在要配置信任关系的主机上新建一个用户名相同的用户(

配置ssh信任(不通过密码验证ssh直接访问目标机器)

在日常的一些使用中,偶尔有不输入密码,直接通过ssh访问目标机器的需求.比如linux之间的rsync同步. 本篇文章中具体阐述了linux服务器之间的ssh信任的配置. 实验场景: A服务器:192.168.189.143 B服务器:192.168.189.144 实验目标: A服务器通过ssh访问B服务器,可无需输入密码,直接登陆. 配置步骤:    1:测试A服务器ssh登陆B服务器: 可以看到,未做任何配置前,ssh登陆是需要输入密码的. 2:配置ssh信任,首先,在A服务器上生成一个S

Solaris ssh配置主机间信任关系

假设需要配置从主机com00biiitf001登录主机ols00biiitf001时不需要密码,则采用以下步骤配置: com00biiitf001上产生公用/私有密钥对 $ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/export/home/jyu/.ssh/id_rsa): Created directory '/export/home/jyu/.

ssh两台机器建立信任关系无密码登陆

在建立信任关系之前先看看基于公钥.私钥的加密和认证. 私钥签名过程 消息-->[私钥]-->签名-->[公钥]-->认证 私钥数字签名,公钥验证 Alice生成公钥和私钥,并将公钥发送给Bob. Alice用自己的私钥生成签名,也就是加密. Alice将签名的信息发送给Bob. Bob用Alice的公钥进行解密,验证签名真伪. 公钥加密过程 消息-->[公钥]-->签名后的消息-->私钥-->解密后的消息 公钥加密,私钥解密 Bob生成自己的公钥和私钥,并将

批量实现多台服务器之间ssh无密码登录的相互信任关系

最近IDC上架了一批hadoop大数据业务服务器,由于集群环境需要在这些服务器之间实现ssh无密码登录的相互信任关系.具体的实现思路:在其中的任一台服务器上通过"ssh-keygen -t rsa"产生公私钥文件,然后将公钥文件拷贝成authorized_keys文件,最后将它的.ssh目录下的文件全部批量拷贝到其他服务器的/root/.ssh目录(即当前用户家目录的.ssh)下即可.这批hadoop服务器的ssh端口默认都是22,密码默认都是kevin123456,ip列表如下: 1

ssh免密码登陆 - 服务器建立信任关系

假设机器A,B,C,要建立A为主,可以免密码直接ssh进入B,C.操作如下: 假设只用用户yimr建立信任,则使用yimr用户登陆主机A,执行如下操作: 产生公钥和私钥 ssh-keygen -t rsa 然后,在/home/用户/.ssh目录下,产生id_rsa, id_rsa.pub文件 将公钥复制到BC节点 scp .ssh/id_rsa.pub B:/home/用户名/.ssh/A.pub 进入BC节点,将公钥放在authorized_keys文件中 cat .ssh/A.pub >>

公钥与密钥的生成与具体的机器没有关系,生成过程没有使用与具体机器相关的信息

早上来公司,收到这个消息,我的心是崩溃的. “tim老师,测试服务器的远程登录密钥失效了”,我问他,做了什么改动没,得到的确切回复是“只是上传了一些代码”,再次询问下,坚持只上传了些代码,言之凿凿.这个问题可大了,1. 就这个机器而言,没有做任何事,“只是上传了代码”就导致用了两年的密钥不能用了,这个机器是着急用来搭建测试服务器的.这个测试服务器已经搭建了一个多星期了,之前一直说代码没准备好,现在又蹦出这个,真是幺蛾子啊.2. 所有包括正式的服务器与测试服务器一共11台.要是所有的服务器都在某个

Oracle Study之-AIX6.1构建主机之间的信任关系(ssh)

Oracle Study之-AIX6.1构建主机之间的信任关系(ssh)    在AIX环境下构建主机信任关系首选rsh,但在构建Oracle 11g RAC时需要ssh支持,以下文档介绍如何在AIX6.1下构建ssh的信任关系.    默认aix没有安装ssh软件包,首先要安装ssh软件包: 1.下载.解压软件包 [[email protected] ssh]#lsOpenSSH_5.8.0.6102.tar.Z  openssl-0.9.8.1802.tar.Z  ssh.txt 解压后通过