日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shell结合expect写的批量scp脚本工具

發布時間:2023/12/9 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell结合expect写的批量scp脚本工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載鏈接:http://www.jb51.net/article/34005.htm


expect用于自動化地執行linux環境下的命令行交互任務,例如scp、ssh之類需要用戶手動輸入密碼然后確認的任務。有了這個工具,定義在scp過程中可能遇到的情況,然后編寫相應的處理語句,就可以自動地完成scp操作了 在部署一個任務時,其中有一項必須的過程就是將一些文件,如安裝包發送到大量的服務器上去。雖然已有宇哥的腳本可用:通過paramiko模塊提供的ssh和scp功能編寫的python腳本。但我到現在還在對python的恐懼之中(雖然已經在空閑時間努力去學習了),所以使用了shell和expect腳本結合的方式,寫了這個批量scp的腳本工具。

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

需要expect工具的話可以在linux環境中使用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_fileexpect {"(yes/no)?"{send "yes\n"expect "*assword:" { send "$password\n"}}"*assword:" {send "$password\n" } } expect "100%" expect eof

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

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

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

spawn代表在本地終端執行的語句,在該語句開始執行后,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 dohost_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在執行時會輸入錯誤的密碼。

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

總結

以上是生活随笔為你收集整理的shell结合expect写的批量scp脚本工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品理论在线观看 | www射 | 咪咪av| 亚洲伦理天堂 | 99国产精品一区二区三区 | 天天色影网| 国产成人无码精品久在线观看 | 日韩精品成人一区 | 欧美人与禽猛交乱配视频 | 日本欧美一区二区三区不卡视频 | 免费无遮挡在线观看视频网站 | 午夜在线免费观看 | 亚洲九九夜夜 | 丰满肉嫩西川结衣av | 日批视频在线 | 天天天天躁天天爱天天碰2018 | 在线h片 | 日本道中文字幕 | 欧美激情一区二区三区四区 | 91看片国产 | 天天色网站 | 又黄又爽无遮挡 | av一区在线| 午夜影视体验区 | 欧美精品一区二区在线播放 | 黄色成年人网站 | 国产精品久久久久久久久久妞妞 | 性做久久久久久免费观看 | 好吊操这里只有精品 | 91中文字幕网 | 欧美性大战久久久久久 | 国产精品国产三级国产传播 | 黄色av影院 | 色多多黄色| 午夜在线视频观看 | 亚洲av无码潮喷在线观看 | av资源库| 激情久久网 | 黄色福利视频网站 | 婷婷.com | 色综合久久88 | 国产女人被狂躁到高潮小说 | 国内自拍偷拍网 | 99自拍偷拍视频 | 人人妻人人澡人人爽国产一区 | 樱花影院最新免费观看攻略 | 少妇xxxx| www.色啪啪.com| 欧美一区二区在线播放 | 99re8在线精品视频免费播放 | 成人在线播放视频 | 欧美视频性| 韩国精品一区二区 | av免费的 | 亚洲免费精品视频在线观看 | 一级黄色片片 | 寡妇一级片 | 精品久久国产字幕高潮 | 久久久久亚洲AV成人网人人小说 | 国产激情视频一区 | 三区在线视频 | 国产精品一区二区三区在线播放 | 狠狠干2018| 闷骚老干部cao个爽 av九九九 | 亚洲欧美日韩精品永久在线 | 国产肉体xxxx裸体784大胆 | 在线免费观看成年人视频 | 男女插孔视频 | 开心激情婷婷 | 五月婷婷七月丁香 | 欧美黄色一级网站 | 无码国精品一区二区免费蜜桃 | 欧美中文字幕在线视频 | 在线va视频| 天天天天干| 蜜桃在线一区二区 | k8经典成人理伦片 | 日日日干干干 | 黄色a在线观看 | 泷泽萝拉在线播放 | 在线观看免费人成视频 | 日韩精品在线观看网站 | 波多野结衣一区二 | www.五月天婷婷| 欧美精品1区 | 亚洲精品福利视频 | 波多一区二区 | 成人高清免费 | 一区二区不卡免费视频 | 国产美女无遮挡免费 | 奇米影视第四色888 免费观看a毛片 | 国产又黄又猛又粗 | 久久精彩视频 | 一卡二卡在线视频 | 97超碰国产在线 | 男女性生活毛片 | 丁香花电影免费播放在线观看 | 天天射天天操天天干 | 亚洲精品欧美日韩 |