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

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

shell結(jié)合expect寫的批量scp腳本工具

2019-10-26 18:35:56
字體:
供稿:網(wǎng)友

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

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

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

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

#!/usr/bin/expectset timeout 10set 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í)行時到哪里去尋找相應(yīng)的啟動程序。代碼剛開始還設(shè)定了timeout的時間為10秒,如果在執(zhí)行scp任務(wù)時遇到了代碼中沒有指定的異常,則在等待10秒后該腳本的執(zhí)行會自動終止。

從以上代碼剛開始的幾行可以看出,我為這個腳本設(shè)置了5個需要手動輸入的參數(shù),分別為:目標(biāo)主機的IP、用戶名、密碼、本地文件路徑、目標(biāo)主機中的文件路徑。如果將以上腳本保存為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開始捕獲終端的輸出信息,然后做出對應(yīng)的操作。expect代碼中的捕獲的(yes/no)內(nèi)容用于完成第一次訪問目標(biāo)主機時保存密鑰的操作。有了這一句,scp的任務(wù)減少了中斷的情況。代碼結(jié)尾的expect eof與spawn對應(yīng),表示捕獲終端輸出信息的終止。

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

shell腳本:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 叶城县| 穆棱市| 东宁县| 元朗区| 无棣县| 舒兰市| 翁牛特旗| 肥乡县| 喜德县| 天柱县| 大邑县| 临颍县| 贵南县| 湘潭县| 连山| 晋宁县| 陇川县| 赣州市| 建始县| 揭西县| 抚顺市| 光山县| 庄河市| 霸州市| 天祝| 静宁县| 田林县| 乐业县| 灵石县| 师宗县| 闵行区| 金昌市| 铁力市| 上思县| 昂仁县| 名山县| 邵阳市| 嫩江县| 新干县| 曲沃县| 苍溪县|