shell腳本無密碼登錄 expect的使用方法詳解
今天需要做一個定時任務(wù)腳本將最新的數(shù)據(jù)包文件傳到遠(yuǎn)程的服務(wù)器上,雖然有密鑰但也是要求輸入密碼的那種,所以只能另想辦法實現(xiàn)讓腳本自動輸入密碼了。
從網(wǎng)上查到使用expect可以,簡單研究了一下,效果不錯。
因為我的操作系統(tǒng)沒有安裝expect,所以直接"yum -y install expect",你可以根據(jù)你的操作系統(tǒng)安裝expect,或者源碼編譯。
安裝好之后就可以使用了,這里有幾種方法:
一、單獨寫一個腳本
如 auto_scp.sh:
#!/usr/bin/expect
#使用第一個參數(shù)
set server_ip [lindex $argv 0]
#后面的也可以用參數(shù)[lindex $argv n]
set server_port 22
set server_dir /home/test
set server_user test
set server_pswd test
set scp_file auto_scp.sh
# 設(shè)置超時時間
set timeout 60
spawn scp -P $server_port $scp_file $server_user@$server_ip:$server_dir
expect {
"passphrase"
{
send "$server_pswd\n";
}
"password"
{
send "$server_pswd\n";
}
"yes/no"
{
send "yes\n";
exp_continue;
}
}
expect eof
我這里的變量都是隨意設(shè)置的,你可以根據(jù)你的情況進(jìn)行選擇,保存退出之后,對該文件加上可執(zhí)行權(quán)限,運行
"./auto_scp.sh 2.2.2.2"就可以了,"2.2.2.2"就是傳入的第一參數(shù)。
"passphrase"和"password"等就是要監(jiān)測的輸入提示的一部分,send "$server_pswd\n"就是要執(zhí)行的命令。
二、在腳本中使用----我比較喜歡這個
我這里使用的是Here document方法。
......
......
expect !!
set timeout 60
spawn scp -P $server_port $scp_file $server_user@$server_ip:$server_dir
expect {
"passphrase"
{
send "$server_pswd\n";
}
"password"
{
send "$server_pswd\n";
}
"yes/no"
{
send "yes\n";
exp_continue;
}
}
expect eof
!!
......
變量都是我從配置文件中獲取的,這里不再贅述了。
三、在腳本中使用
也是在腳本使用,但是不是用的Here document方法,而是使用expect -c 參數(shù)書,"-c"選項后面的字符串填充的就是命令。但是要注意本身字符串的轉(zhuǎn)義符。
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
您可能感興趣的文章:- Linux expect實現(xiàn)自動登錄腳本實例代碼
- 利用expect命令實現(xiàn)Shell自動化交互的方法詳解
- Linux下使用expect命令編寫自動化交互腳本
- 詳解Linux使用shell+expect遠(yuǎn)程登錄主機(jī)
- ssh expect自動登錄的腳本代碼
- linux expect 自動登錄交換機(jī)保存配置的方法