1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<code>我的部落格已遷移到xdoujiang.com請去那邊和我交流</code>
<code>一、使用expect自動登入</code>
<code>cat</code> <code>expect.sh</code>
<code>#!/usr/bin/expect</code>
<code>#使用第一個參數 </code>
<code>set</code> <code>local_ip [lindex $argv 0]</code>
<code>#後面的也可以用參數[lindex $argv n]</code>
<code>#set password [lindex $argv 1 ] </code>
<code>#set password2 [lindex $argv 2]</code>
<code>#set command [lindex $argv 3]</code>
<code>set</code> <code>local_port 22</code>
<code>set</code> <code>local_user jackchem</code>
<code>set</code> <code>local_11psss 11111111</code>
<code>set</code> <code>local_22psss 22222222</code>
<code>set</code> <code>timeout 30</code>
<code>spawn </code><code>ssh</code> <code>-q [email protected].$local_ip</code>
<code>expect {</code>
<code>"192.168.20.* password"</code>
<code>{</code>
<code> </code><code>send </code><code>"$local_11psss\n"</code><code>;</code>
<code>}</code>
<code>"192.168.21.* password"</code>
<code> </code><code>send </code><code>"$local_22psss\n"</code><code>;</code>
<code>"yes/no"</code>
<code> </code><code>send </code><code>"yes\n"</code><code>;</code>
<code> </code><code>exp_continue;</code>
<code>interact</code>
<code>先</code><code>chmod</code> <code>+x expect.sh</code>
<code>比如登入到192.168.20.99的話.</code><code>/auto</code><code>.sh 20.99</code>
<code>比如登入到192.168.21.88的話.</code><code>/auto</code><code>.sh 21.88</code>
<code>二、使用sshpass自動登入</code>
<code>cat</code> <code>sshpass.sh</code>
<code>#!/bin/bash</code>
<code>#-------------------------------------------------- </code>
<code>#Created:2015-05-18</code>
<code>#Author:jimmygong</code>
<code>#Mail:[email protected]</code>
<code>#Function:</code>
<code>#Version:1.0</code>
<code>#--------------------------------------------------</code>
<code>case</code> <code>$1 </code><code>in</code>
<code>192.168.22[0-9].*)</code>
<code>sshpass -f </code><code>/root/</code><code>.11pass </code><code>ssh</code> <code>-q -p22 -l tomhong $1;;</code>
<code>192.168.23[0-9].*)</code>
<code>sshpass -f </code><code>/root/</code><code>.22pass </code><code>ssh</code> <code>-q -p22 -l tomhong $1;;</code>
<code>10.*.*.*)</code>
<code>sshpass -f </code><code>/root/</code><code>.33pass </code><code>ssh</code> <code>-q -p22 -l tomhong $1;;</code>
<code>esac</code>
<code>先</code><code>chmod</code> <code>+x sshpass.sh</code>
<code>比如登入到192.168.230.199的話.</code><code>/sshpass</code><code>.sh 192.168.230.199</code>
<code>比如登入到10.1.1.55的話.</code><code>/sshpass</code><code>.sh 10.1.1.55</code>
<code>三、批量執行多台機器同一個操作(非互動模式)sshpass</code>
<code>基礎環境說明</code>
<code>1、ip</code>
<code>serverA=192.168.1.8</code>
<code>serverB=192.168.1.7</code>
<code>serverC=192.168.1.10</code>
<code>2、</code><code>ssh</code><code>的-t和-o </code><code>"StrictHostKeyChecking=no"</code><code>參數</code>
<code>-o option Can be used to give options </code><code>in</code> <code>the </code><code>format</code> <code>used </code><code>in</code> <code>the configuration </code><code>file</code><code>.</code>
<code>This is useful </code><code>for</code> <code>specifying options </code><code>for</code> <code>which</code> <code>there is no separate </code><code>command</code><code>-line flag.</code>
<code>For full details of the options listed below,and their possible values,see ssh_config(5).</code>
<code> </code>
<code>-t Force pseudo-</code><code>tty</code> <code>allocation.This can be used to execute arbitrary </code><code>screen</code><code>-based programs on a remote machine,</code>
<code>which</code> <code>can be very useful,e.g.when implementing menu services.Multiple -t options force </code><code>tty</code> <code>allocation,even </code><code>if</code> <code>ssh</code> <code>has no </code><code>local</code> <code>tty</code><code>.</code>
<code>供一個遠端伺服器的虛拟</code><code>tty</code><code>終端</code>
<code>3、sshpass的-f參數</code>
<code>-f filename The password is the first line of the </code><code>file</code> <code>filename.</code>
<code>支援從檔案裡讀取密碼</code>
<code>#Email:[email protected]</code>
<code>#FileName:sshpass.sh</code>
<code>#Function: </code>
<code>#Version:1.0 </code>
<code>#Created:2015-12-16</code>
<code>port=22</code>
<code>user=</code><code>"jimmy"</code>
<code>cmd=</code><code>"/bin/ps -ef|grep mysql"</code>
<code>#cmd="/bin/df -Th"</code>
<code>allip=(</code>
<code>192.168.1.8</code>
<code>192.168.1.7</code>
<code>192.168.1.10</code>
<code>)</code>
<code>for</code> <code>ip </code><code>in</code> <code>${allip[@]}</code>
<code>do</code>
<code> </code><code>echo</code> <code>$ip</code>
<code> </code><code>sshpass -f </code><code>/root/</code><code>.11pass </code><code>ssh</code> <code>-o </code><code>"StrictHostKeyChecking=no"</code> <code>-t -p$port $user@$ip $cmd</code>
<code>done</code>
<code>執行結果</code>
<code>bash</code> <code>sshpass.sh</code>
<code>root 1992 1 0 09:57 ? 00:00:00 </code><code>/bin/sh</code> <code>/usr/bin/mysqld_safe</code>
<code>mysql 2331 1992 0 09:57 ? 00:00:00 </code><code>/usr/sbin/mysqld</code> <code>--basedir=</code><code>/usr</code> <code>--datadir=</code><code>/var/lib/mysql</code> <code>--plugin-</code><code>dir</code><code>=</code><code>/usr/lib/mysql/plugin</code> <code>--user=mysql --pid-</code><code>file</code><code>=</code><code>/var/run/mysqld/mysqld</code><code>.pid --socket=</code><code>/var/run/mysqld/mysqld</code><code>.sock --port=3306</code>
<code>root 2332 1992 0 09:57 ? 00:00:00 logger -t mysqld -p daemon.error</code>
<code>jimmy 2665 2664 0 10:09 pts</code><code>/1</code> <code>00:00:00 </code><code>bash</code> <code>-c </code><code>/bin/ps</code> <code>-ef|</code><code>grep</code> <code>mysql</code>
<code>jimmy 2667 2665 0 10:09 pts</code><code>/1</code> <code>00:00:00 </code><code>grep</code> <code>mysql</code>
<code>Connection to 192.168.1.8 closed.</code>
<code>root 1983 1 0 09:57 ? 00:00:00 </code><code>/bin/sh</code> <code>/usr/bin/mysqld_safe</code>
<code>mysql 2310 1983 0 09:57 ? 00:00:00 </code><code>/usr/sbin/mysqld</code> <code>--basedir=</code><code>/usr</code> <code>--datadir=</code><code>/var/lib/mysql</code> <code>--plugin-</code><code>dir</code><code>=</code><code>/usr/lib/mysql/plugin</code> <code>--user=mysql --pid-</code><code>file</code><code>=</code><code>/var/run/mysqld/mysqld</code><code>.pid --socket=</code><code>/var/run/mysqld/mysqld</code><code>.sock --port=3306</code>
<code>root 2311 1983 0 09:57 ? 00:00:00 logger -t mysqld -p daemon.error</code>
<code>jimmy 2636 2635 0 10:09 pts</code><code>/1</code> <code>00:00:00 </code><code>bash</code> <code>-c </code><code>/bin/ps</code> <code>-ef|</code><code>grep</code> <code>mysql</code>
<code>jimmy 2638 2636 0 10:09 pts</code><code>/1</code> <code>00:00:00 </code><code>grep</code> <code>mysql</code>
<code>Connection to 192.168.1.7 closed.</code>
<code>root 2160 1 0 09:57 ? 00:00:00 </code><code>/bin/sh</code> <code>/usr/bin/mysqld_safe</code>
<code>mysql 2505 2160 0 09:57 ? 00:00:04 </code><code>/usr/sbin/mysqld</code> <code>--basedir=</code><code>/usr</code> <code>--datadir=</code><code>/var/lib/mysql</code> <code>--plugin-</code><code>dir</code><code>=</code><code>/usr/lib/mysql/plugin</code> <code>--user=mysql --pid-</code><code>file</code><code>=</code><code>/var/run/mysqld/mysqld</code><code>.pid --socket=</code><code>/var/run/mysqld/mysqld</code><code>.sock --port=3306</code>
<code>root 2506 2160 0 09:57 ? 00:00:00 logger -t mysqld -p daemon.error</code>
<code>jimmy 2842 2841 0 10:09 pts</code><code>/1</code> <code>00:00:00 </code><code>bash</code> <code>-c </code><code>/bin/ps</code> <code>-ef|</code><code>grep</code> <code>mysql</code>
<code>jimmy 2844 2842 0 10:09 pts</code><code>/1</code> <code>00:00:00 </code><code>grep</code> <code>mysql</code>
<code>Connection to 192.168.1.10 closed.</code>
本文轉自 xdoujiang 51CTO部落格,原文連結:http://blog.51cto.com/7938217/1652452,如需轉載請自行聯系原作者