国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

linux中expect批量修改用戶密碼的腳本

2024-08-27 23:59:17
字體:
供稿:網(wǎng)友

使用expect前,我們是需要先安裝了,否則expect是不可用的,下面一起來給各位總結(jié)兩個expect批量修改用戶密碼腳本.

1、使用expect前,需要先安裝兩個rpm包,代碼如下:

  1. # rpm -ihv expect-5.43.0-8.el5.i386.rpm 
  2. # rpm -ihv expect-devel-5.43.0-8.el5.i386.rpm 

2、批量修改密碼的腳本,代碼如下:

  1. #!/usr/bin/expect 
  2. #yemaosheng.com 
  3. if { $argc<2 } { 
  4.     send_user "usage: $argv0 <host file> <cmd file> \n" 
  5.     exit 
  6.  
  7. # 機(jī)器列表數(shù)據(jù)格式:  IP  端口  舊密碼  新密碼 
  8. set hostfile    [ open [lindex $argv 0] ] 
  9. # 命令列表數(shù)據(jù)格式:  一條命令一行 
  10. set cmdfile    [ open [lindex $argv 1] ] 
  11.  
  12. # 數(shù)據(jù)文件分割符,默認(rèn)為空格 
  13. set part "\ " 
  14.  
  15. # 過濾關(guān)鍵字 
  16. set key_password "password:\ " 
  17. set key_init "\(yes/no\)\?\ " 
  18. set key_confirm "'yes'\ or\ 'no':\ " 
  19. set key_ps "*]#\ " 
  20. set key_newpassword "UNIX password:\ " 
  21. set timeout 30 
  22.  
  23. log_file ./exprct.log 
  24. match_max 20480 
  25.  
  26. while {[gets $hostfile _hosts_] >= 0} { 
  27.     set hosts [string trim $_hosts_
  28.     set str_index [string first $part $hosts
  29.     set host [string trim [string range $hosts 0 $str_index]] 
  30.     set temp [string trim [string range $hosts [expr $str_index + 1] [string length $hosts]]] 
  31.     set str_index [string first $part $temp
  32.  
  33.     if { $str_index == -1 } { 
  34.         set port 22 
  35.         set pass $temp 
  36.         set newpass $temp 
  37.     } else { 
  38.         set port [string trim [string range $temp 0 $str_index]] 
  39.         set temp_pass [string trim [string range $temp [expr $str_index + 1] [string length $temp]]] 
  40.         set str_index [string first $part $temp_pass
  41.         set pass [string trim [string range $temp_pass 0 $str_index]] 
  42.         set newpass [string trim [string range $temp_pass [expr $str_index + 1] [string length $temp_pass]]] 
  43.     } 
  44.  
  45.     spawn ssh -p $port $host 
  46.     while {1} { 
  47.         expect { 
  48.             "$key_password" { 
  49.                 send "$pass\r" 
  50.             } 
  51.             "$key_init" { 
  52.                 send "yes\r" 
  53.             } 
  54.             "$key_confirm" { 
  55.                 send "yes\r" 
  56.             } 
  57.             "$key_ps" { 
  58.                 while {[gets $cmdfile cmd] >= 0} { 
  59.                     send "$cmd\r" 
  60.                     expect { 
  61.                         "$key_ps" { 
  62.                             continue 
  63.                         } 
  64.                         "$key_newpassword" { 
  65.                             send "$newpass\r" 
  66.                             expect "$key_newpassword" { 
  67.                                 send "$newpass\r" 
  68.                                 expect "$key_ps" 
  69.                                 continue 
  70.                             } 
  71.                         } 
  72.                     } 
  73.                 } 
  74.                 seek $cmdfile 0 start 
  75.                 send_user "\r" 
  76.                 break 
  77.             } 
  78.             timeout { 
  79.                 puts "$host timeout\n" 
  80.                 break  //Vevb.com 
  81.             } 
  82.         } 
  83.     } 
  84.     send "exit\r" 
  85.     close 
  86.     wait 
  87.  
  88. close $hostfile 
  89. close $cmdfile 
  90.  
  91. exit 

3、批量修改密碼的腳本.,用whereis expect確定expect位置,代碼如下:

  1. [root@rac1 ~]# whereis expect 
  2. expect: /usr/bin/expect 
  3. #!/usr/bin/expect 
  4. #設(shè)置變量 
  5. set timeout 10 
  6. set USERNAME etnet 
  7. set PASSWORD 123456 
  8. #一個循環(huán),說明對哪些機(jī)器進(jìn)行操作 
  9. foreach host { 
  10. 192.168.151.89 
  11. 192.168.151.90 
  12. } { 
  13. spawn ssh  
  14. -l root ${host} 
  15. #ssh首次登陸的驗證,exp_continue會繼續(xù)執(zhí)行下一循環(huán) 
  16. expect { 
  17.         "no)?" {send "yes\r";exp_continue} 
  18.         "password:" {send "123456\r"
  19. #每個expect捕獲一個提示符,send發(fā)送一條命令,命令以\r結(jié)尾。 
  20. expect "]*" 
  21. send "passwd ${USERNAME}\r" 
  22. expect "password:" 
  23. send "${PASSWORD}\r" 
  24. expect "password:" 
  25. send "${PASSWORD}\r" 
  26. expect "]*" 
  27. send "exit\r" 

補(bǔ)充:expect用法:

1.[#!/usr/bin/expect]

這一行告訴操作系統(tǒng)腳本里的代碼使用那一個shell來執(zhí)行,這里的expect其實和linux下的bash、windows下的cmd是一類東西.

注意:這一行需要在腳本的第一行。

2.[set timeout 30]

基本上認(rèn)識英文的都知道這是設(shè)置超時時間的,現(xiàn)在你只要記住他的計時單位是:秒   ,timeout -1 為永不超時.

3.[spawn ssh -l username 192.168.1.1]

spawn是進(jìn)入expect環(huán)境后才可以執(zhí)行的expect內(nèi)部命令,如果沒有裝expect或者直接在默認(rèn)的SHELL下執(zhí)行是找不到spawn命令的,所以不要用 “which spawn“之類的命令去找spawn命令,好比windows里的dir就是一個內(nèi)部命令,這個命令由shell自帶,你無法找到一個dir.com 或 dir.exe 的可執(zhí)行文件.

它主要的功能是給ssh運行進(jìn)程加個殼,用來傳遞交互指令.

4.[expect "password:"]

這里的expect也是expect的一個內(nèi)部命令,有點暈吧,expect的shell命令和內(nèi)部命令是一樣的,但不是一個功能,習(xí)慣就好了,這個命令的意思是判斷上次輸出結(jié)果里是否包含“password:”的字符串,如果有則立即返回,否則就等待一段時間后返回,這里等待時長就是前面設(shè)置的30秒.

5.[send "ispass\r"]

這里就是執(zhí)行交互動作,與手工輸入密碼的動作等效.

溫馨提示:命令字符串結(jié)尾別忘記加上“\r”,如果出現(xiàn)異常等待的狀態(tài)可以核查一下.

6.[interact]

執(zhí)行完成后保持交互狀態(tài),把控制權(quán)交給控制臺,這個時候就可以手工操作了,如果沒有這一句登錄完成后會退出,而不是留在遠(yuǎn)程終端上,如果你只是登錄過去執(zhí)行.

7.$argv 參數(shù)數(shù)組

expect腳本可以接受從bash傳遞過來的參數(shù),可以使用[lindex $argv n]獲得,n從0開始,分別表示第一個,第二個,第三個....參數(shù).

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 朝阳县| 枣强县| 宜丰县| 乌鲁木齐县| 区。| 华亭县| 西畴县| 榆树市| 德格县| 绥芬河市| 东乡族自治县| 涪陵区| 砀山县| 越西县| 琼中| 酉阳| 金平| 永胜县| 岑溪市| 广德县| 临澧县| 隆林| 桂平市| 类乌齐县| 盐边县| 义乌市| 当涂县| 乌恰县| 仁怀市| 吴堡县| 天镇县| 宜春市| 醴陵市| 中宁县| 额尔古纳市| 金堂县| 长治县| 宜兴市| 云阳县| 柳林县| 社旗县|