Shell指令碼實現自動輸入密碼登入伺服器_linux shell

來源:互聯網
上載者:User

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

那麼問題來了,在指令碼自動化執行的時候需要輸入密碼怎麼辦?比如你的指令碼裡有一條scp語句,總不能在指令碼執行到這一句時手動輸入密碼吧。

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

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

複製代碼 代碼如下:

sudo yum install expect 

至於Mac使用者,可以通過homebrew安裝(需要先安裝homebrew,請自行Google)
複製代碼 代碼如下:

brew install expect 

測試指令碼
我們寫一個簡單的指令碼實現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來解釋執行的,而不是由bash解釋執行,所以代碼的文法和shell指令碼也是不一樣的,其中set passwd your_passwd設定成你自己的密碼,然後執行如下命令

複製代碼 代碼如下:

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

執行前確保scp.exp有執行許可權,第一個參數為你本地檔案,第二個為遠程主機的目錄,運行指令碼如果報錯“connect is timeout”,可以把逾時設長一點,第二行set timeout 20可以設定逾時時間,單位是秒。指令碼執行效果如下

還能做什麼

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

所以我們可以根據終端的提示來配置輸入命令,這樣就能達到了自動化的效果。至於處理其它互動情境,只需要照著上面的指令碼依葫蘆畫瓢就行了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.