您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何用Shell腳本實(shí)現(xiàn)自動(dòng)輸入密碼登錄服務(wù)器”,在日常操作中,相信很多人在如何用Shell腳本實(shí)現(xiàn)自動(dòng)輸入密碼登錄服務(wù)器問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何用Shell腳本實(shí)現(xiàn)自動(dòng)輸入密碼登錄服務(wù)器”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
使用Linux的程序員對(duì)輸入密碼這個(gè)舉動(dòng)一定不陌生,在Linux下對(duì)用戶有嚴(yán)格的權(quán)限限制,干很多事情越過了權(quán)限就得輸入密碼,比如使用超級(jí)用戶執(zhí)行命令,又比如ftp、ssh連接遠(yuǎn)程主機(jī)等等,如下圖:
那么問題來了,在腳本自動(dòng)化執(zhí)行的時(shí)候需要輸入密碼怎么辦?比如你的腳本里有一條scp語句,總不能在腳本執(zhí)行到這一句時(shí)手動(dòng)輸入密碼吧。
針對(duì)于ssh或scp命令,可能有人會(huì)回答是建立信任關(guān)系,關(guān)于建立ssh信任關(guān)系的方法請(qǐng)自行百度Google,只需要兩行簡(jiǎn)單的命令即可搞定,但這并不是常規(guī)的解決方案,如果是ftp連接就沒轍了,況且,你不可能為了執(zhí)行某些命令去給每個(gè)你要連接的主機(jī)都手動(dòng)建立ssh信任,這已經(jīng)偏離了今天主題的本意,今天要說的是在腳本里自動(dòng)輸入密碼,我們可以想象下,更優(yōu)雅的方式應(yīng)該是在腳本里自己配置密碼,當(dāng)屏幕交互需要輸入時(shí)自動(dòng)輸入進(jìn)去,要達(dá)到這樣的效果就需要用到expect。
安裝
CentOS下安裝命令很簡(jiǎn)單,如下
代碼如下:
sudo yum install expect
至于Mac用戶,可以通過homebrew安裝(需要先安裝homebrew,請(qǐng)自行Google)
代碼如下:
brew install expect
測(cè)試腳本
我們寫一個(gè)簡(jiǎn)單的腳本實(shí)現(xiàn)scp拷貝文件,在腳本里配置密碼,保存為scp.exp如下
代碼如下:
#!/usr/bin/expect
set timeout 20
if { [llength $argv] < 2} {
puts "Usage:"
puts "$argv0 local_file remote_path"
exit 1
}
set local_file [lindex $argv 0]
set remote_path [lindex $argv 1]
set passwd your_passwd
set passwderror 0
spawn scp $local_file $remote_path
expect {
"*assword:*" {
if { $passwderror == 1 } {
puts "passwd is error"
exit 2
}
set timeout 1000
set passwderror 1
send "$passwd\r"
exp_continue
}
"*es/no)?*" {
send "yes\r"
exp_continue
}
timeout {
puts "connect is timeout"
exit 3
}
}
注意,第一行很重要,通常我們的腳本里第一行是#!/bin/bash,而這里是你機(jī)器上expect程序的路徑,說明這段腳本是由expect來解釋執(zhí)行的,而不是由bash解釋執(zhí)行,所以代碼的語法和shell腳本也是不一樣的,其中set passwd your_passwd設(shè)置成你自己的密碼,然后執(zhí)行如下命令
代碼如下:
./scp.exp ./local_file user@host:/xx/yy/
執(zhí)行前確保scp.exp有執(zhí)行權(quán)限,第一個(gè)參數(shù)為你本地文件,第二個(gè)為遠(yuǎn)程主機(jī)的目錄,運(yùn)行腳本如果報(bào)錯(cuò)“connect is timeout”,可以把超時(shí)設(shè)長(zhǎng)一點(diǎn),第二行set timeout 20可以設(shè)置超時(shí)時(shí)間,單位是秒。腳本執(zhí)行效果如下
還能做什么
細(xì)心的同學(xué)一定發(fā)現(xiàn)了,其實(shí)expect提供的是和終端的一種交互機(jī)制,輸入密碼只是其中一種應(yīng)用形式,只要是在終端阻塞需要輸入時(shí),都可以通過expect腳本完成自動(dòng)輸入,比如前面腳本里配置了兩種交互場(chǎng)景,一種是終端提示"password:"時(shí)輸入密碼,還有一種是提示"yes/no)?"時(shí)輸入“yes”,如果和遠(yuǎn)程主機(jī)是第一次建立連接,執(zhí)行scp.exp腳本效果是這樣的
到此,關(guān)于“如何用Shell腳本實(shí)現(xiàn)自動(dòng)輸入密碼登錄服務(wù)器”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。