如何用Shell腳本實現(xiàn)自動輸入密碼登錄服務器-創(chuàng)新互聯(lián)

這篇文章主要介紹“如何用Shell腳本實現(xiàn)自動輸入密碼登錄服務器”,在日常操作中,相信很多人在如何用Shell腳本實現(xiàn)自動輸入密碼登錄服務器問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何用Shell腳本實現(xiàn)自動輸入密碼登錄服務器”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

專注于為中小企業(yè)提供成都網(wǎng)站設計、成都網(wǎng)站制作服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)新區(qū)免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

使用Linux的程序員對輸入密碼這個舉動一定不陌生,在Linux下對用戶有嚴格的權限限制,干很多事情越過了權限就得輸入密碼,比如使用超級用戶執(zhí)行命令,又比如ftp、ssh連接遠程主機等等,如下圖:

如何用Shell腳本實現(xiàn)自動輸入密碼登錄服務器

那么問題來了,在腳本自動化執(zhí)行的時候需要輸入密碼怎么辦?比如你的腳本里有一條scp語句,總不能在腳本執(zhí)行到這一句時手動輸入密碼吧。

針對于ssh或scp命令,可能有人會回答是建立信任關系,關于建立ssh信任關系的方法請自行百度Google,只需要兩行簡單的命令即可搞定,但這并不是常規(guī)的解決方案,如果是ftp連接就沒轍了,況且,你不可能為了執(zhí)行某些命令去給每個你要連接的主機都手動建立ssh信任,這已經(jīng)偏離了今天主題的本意,今天要說的是在腳本里自動輸入密碼,我們可以想象下,更優(yōu)雅的方式應該是在腳本里自己配置密碼,當屏幕交互需要輸入時自動輸入進去,要達到這樣的效果就需要用到expect。

安裝
CentOS下安裝命令很簡單,如下


代碼如下:


sudo yum install expect



至于Mac用戶,可以通過homebrew安裝(需要先安裝homebrew,請自行Google)


代碼如下:


brew install expect


測試腳本
我們寫一個簡單的腳本實現(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,而這里是你機器上expect程序的路徑,說明這段腳本是由expect來解釋執(zhí)行的,而不是由bash解釋執(zhí)行,所以代碼的語法和shell腳本也是不一樣的,其中set passwd your_passwd設置成你自己的密碼,然后執(zhí)行如下命令


代碼如下:


./scp.exp ./local_file user@host:/xx/yy/



執(zhí)行前確保scp.exp有執(zhí)行權限,第一個參數(shù)為你本地文件,第二個為遠程主機的目錄,運行腳本如果報錯“connect is timeout”,可以把超時設長一點,第二行set timeout 20可以設置超時時間,單位是秒。腳本執(zhí)行效果如下

如何用Shell腳本實現(xiàn)自動輸入密碼登錄服務器

還能做什么

細心的同學一定發(fā)現(xiàn)了,其實expect提供的是和終端的一種交互機制,輸入密碼只是其中一種應用形式,只要是在終端阻塞需要輸入時,都可以通過expect腳本完成自動輸入,比如前面腳本里配置了兩種交互場景,一種是終端提示"password:"時輸入密碼,還有一種是提示"yes/no)?"時輸入“yes”,如果和遠程主機是第一次建立連接,執(zhí)行scp.exp腳本效果是這樣的

如何用Shell腳本實現(xiàn)自動輸入密碼登錄服務器

到此,關于“如何用Shell腳本實現(xiàn)自動輸入密碼登錄服務器”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

文章名稱:如何用Shell腳本實現(xiàn)自動輸入密碼登錄服務器-創(chuàng)新互聯(lián)
文章分享:http://www.muchs.cn/article14/shode.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、微信小程序、企業(yè)建站、靜態(tài)網(wǎng)站、網(wǎng)站設計公司網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化