天天看點

sshpass和expect遠端登入并執行指令

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,如需轉載請自行聯系原作者

繼續閱讀