利用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