最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

shell結合expect寫的批量scp腳本工具

 更新時間:2013年02月10日 18:45:50   投稿:mdxy-dxy  
expect用于自動化地執(zhí)行l(wèi)inux環(huán)境下的命令行交互任務,例如scp、ssh之類需要用戶手動輸入密碼然后確認的任務。有了這個工具,定義在scp過程中可能遇到的情況,然后編寫相應的處理語句,就可以自動地完成scp操作了

在部署一個任務時,其中有一項必須的過程就是將一些文件,如安裝包發(fā)送到大量的服務器上去。雖然已有宇哥的腳本可用:通過paramiko模塊提供的ssh和scp功能編寫的python腳本。但我到現在還在對python的恐懼之中(雖然已經在空閑時間努力去學習了),所以使用了shell和expect腳本結合的方式,寫了這個批量scp的腳本工具。

expect用于自動化地執(zhí)行l(wèi)inux環(huán)境下的命令行交互任務,例如scp、ssh之類需要用戶手動輸入密碼然后確認的任務。有了這個工具,定義在scp過程中可能遇到的情況,然后編寫相應的處理語句,就可以自動地完成scp操作了。

需要expect工具的話可以在linux環(huán)境中使用apt-get或pacman這些包管理工具去獲取安裝,或是到expect開源項目的網站:http://expect.sourceforge.net/ 來獲取。

安裝expect之后,可以嘗試使用以下的代碼來完成對單個服務器的scp任務:

#!/usr/bin/expect
set timeout 10
set host [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set src_file [lindex $argv 3]
set dest_file [lindex $argv 4]
spawn scp $src_file $username@$host:$dest_file
 expect {
 "(yes/no)?"
  {
  send "yes\n"
  expect "*assword:" { send "$password\n"}
 }
 "*assword:"
{
 send "$password\n"
}
}
expect "100%"
expect eof


注意代碼剛開始的第一行,指定了expect的路徑,與shell腳本相同,這一句指定了程序在執(zhí)行時到哪里去尋找相應的啟動程序。代碼剛開始還設定了timeout的時間為10秒,如果在執(zhí)行scp任務時遇到了代碼中沒有指定的異常,則在等待10秒后該腳本的執(zhí)行會自動終止。

從以上代碼剛開始的幾行可以看出,我為這個腳本設置了5個需要手動輸入的參數,分別為:目標主機的IP、用戶名、密碼、本地文件路徑、目標主機中的文件路徑。如果將以上腳本保存為expect_scp文件,則在shell下執(zhí)行時需要按以下的規(guī)范來輸入命令:
./expect_scp 192.168.75.130 root 123456 /root/src_file /root/dest_file

以上的命令執(zhí)行后,將把本地/root目錄下的src_file文件拷貝到用戶名為root,密碼為123456的主機192.168.75.130中的/root下,同時還將這個源文件重命名為dest_file。

spawn代表在本地終端執(zhí)行的語句,在該語句開始執(zhí)行后,expect開始捕獲終端的輸出信息,然后做出對應的操作。expect代碼中的捕獲的(yes/no)內容用于完成第一次訪問目標主機時保存密鑰的操作。有了這一句,scp的任務減少了中斷的情況。代碼結尾的expect eof與spawn對應,表示捕獲終端輸出信息的終止。

有了這段expect的代碼,還只能完成對單個遠程主機的scp任務。如果需要實現批量scp的任務,則需要再寫一個shell腳本來調用這個expect腳本。

shell腳本:

復制代碼 代碼如下:

#!/bin/sh
list_file=$1
src_file=$2
dest_file=$3
cat $list_file | while read line
do
   host_ip=`echo $line | awk '{print $1}'`
   username=`echo $line | awk '{print $2}'`
   password=`echo $line | awk '{print $3}'`
   echo "$host_ip"
   ./expect_scp $host_ip $username $password $src_file $dest_file
done

指定了3個參數:列表文件的位置、本地源文件路徑、遠程主機目標文件路徑。需要說明的是其中的列表文件指定了遠程主機ip、用戶名、密碼,這些信息需要寫成以下的格式:
IP username password

中間用空格或tab鍵來分隔,多臺主機的信息需要寫多行內容,如:
192.168.75.130 root 123456
192.168.75.131 knktc testpass

這樣就指定了兩臺遠程主機的信息。注意,如果遠程主機密碼中有“$”、“#”這類特殊字符的話,在編寫列表文件時就需要在這些特殊字符前加上轉義字符,否則expect在執(zhí)行時會輸入錯誤的密碼。

對于這個shell腳本,保存為batch_scp.sh文件,與剛才保存的expect_scp文件和列表文件(就定義為hosts.list文件吧)放到同一目錄下,執(zhí)行時按照以下方式輸入命令就可以了:
./batch_scp.sh ./hosts.list /root/src_file /root/destfile
用這兩個腳本文件,就可以簡單地完成批量scp的任務了。
其實批量scp的任務并不難,但是批量ssh的任務可能就會遇到麻煩了。

相關文章

  • Linux查看磁盤信息的命令詳解

    Linux查看磁盤信息的命令詳解

    這篇文章主要介紹了Linux查看磁盤信息的命令,df與du命令,df 命令主要用于需要檢查文件系統(tǒng)上已使用和可用的磁盤空間的數量,du命令主要用于需要了解系統(tǒng)上的目錄或文件所使用的磁盤空間量,文中有相關的代碼示例供大家參考,需要的朋友可以參考下
    2024-04-04
  • linux awk時間計算腳本及awk命令詳解

    linux awk時間計算腳本及awk命令詳解

    這篇文章主要介紹了linux awk時間計算腳本及awk命令詳解的相關資料,需要的朋友可以參考下
    2015-11-11
  • 詳解Linux 中五個重啟命令

    詳解Linux 中五個重啟命令

    這篇文章給大家介紹了linux中的五個重啟命名及重啟命令的具體說明,需要的朋友參考下吧
    2017-03-03
  • Shell腳本實現的一個簡易Web服務器例子分享

    Shell腳本實現的一個簡易Web服務器例子分享

    這篇文章主要介紹了Shell腳本實現的一個簡易Web服務器例子分享,本文實現的Web服務器非常簡單實用,可以在你不想安裝nginx、apache等大型WEB服務器時使用,需要的朋友可以參考下
    2014-12-12
  • 詳解shell 遍歷文件夾內所有文件并打印絕對路徑

    詳解shell 遍歷文件夾內所有文件并打印絕對路徑

    本篇文章主要介紹了shell 遍歷文件夾內所有文件并打印絕對路徑,具有一定的參考價值,有興趣的可以了解一下。
    2017-01-01
  • Linux 下vim使用教程

    Linux 下vim使用教程

    Vim是從 vi 發(fā)展出來的一個文本編輯器。這篇文章給大家介紹Linux 下vim使用教程,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-07-07
  • shell腳本實現監(jiān)控shell腳本的執(zhí)行流程及變量的值

    shell腳本實現監(jiān)控shell腳本的執(zhí)行流程及變量的值

    這篇文章主要介紹了shell腳本實現監(jiān)控shell腳本的執(zhí)行流程及變量的值本文使用shell完成對執(zhí)行過程中條件語句中的變量的變化的監(jiān)控和整個程序的執(zhí)行流程的觀察功能,需要的朋友可以參考下
    2015-03-03
  • Shell中實現“多線程”執(zhí)行腳本文件完美解決方案

    Shell中實現“多線程”執(zhí)行腳本文件完美解決方案

    這篇文章主要介紹了Shell中實現“多線程”執(zhí)行腳本文件完美解決方案,本文是針對一次調用執(zhí)行多個腳本文件并分批執(zhí)行的一個解決方法的測試和總結,需要的朋友可以參考下
    2014-12-12
  • telnet 命令使用方法大全

    telnet 命令使用方法大全

    這篇文章主要介紹了telnet 命令使用方法大全,本文給大家介紹的非常想詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • awk實現Left、join查詢、去除重復值以及局部變量講解例子

    awk實現Left、join查詢、去除重復值以及局部變量講解例子

    這篇文章主要介紹了awk實現Left、join查詢、去除重復值以及局部變量講解例子,awk的高級使用技巧,需要的朋友可以參考下
    2014-07-07

最新評論

睢宁县| 谷城县| 黔西县| 玉林市| 吴江市| 凤阳县| 丰镇市| 荃湾区| 长治市| 上林县| 广安市| 乐都县| 宜川县| 水城县| 卢氏县| 同德县| 诏安县| 台东市| 湘潭市| 关岭| 咸阳市| 顺昌县| 鸡泽县| 石台县| 盐山县| 五原县| 句容市| 佛冈县| 平安县| 开平市| 大悟县| 大城县| 渭源县| 安顺市| 永吉县| 曲麻莱县| 资中县| 温宿县| 信宜市| 库车县| 江源县|