Shell指令碼互動之:自動輸入密碼

來源:互聯網
上載者:User

平時在控制台輸入指令如:sudo、ssh、ftp或者修改admin許可權的檔案時候都會要求輸入password,但是在she'll指令碼運行過程中該如何互動實現自動輸入密碼呢。

下面總結三種實現方法。

一、重新導向:用重新導向方法實現互動的前提是指令需要有參數來指定密碼輸入方式,如ftp就有-i參數來指定使用標準輸入來輸入密碼

        shell用重新導向作為標準輸入的用法是:cmd<<delimiter ,shell 會將分界符delimiter之後直到下一個同樣的分界符之前的內容作為輸入

  實現ftp自動登入並運行ls指令的用法如下:其中zjk為使用者名稱,zjk123為密碼        

ftp -i -n 192.168.21.46 <<EOFuser zjk zjk123lsEOF

二:管道:跟重新導向一樣,指令同樣要有參數來指定密碼輸入方式,如sudo的-S參數,passwd的-stdin參數

       所以實現sudo自動輸入密碼的指令碼如下:其中zjk123為密碼

      echo 'zjk123' | sudo -S cp file1 /etc/hosts
      實現自動修改密碼的指令碼寫法如下:

      echo 'password' | passwd -stdin username

三:expect:上面介紹的兩種方法前提條件是指令有參數來設定密碼輸入方式,像ssh指令就沒有這樣的參數,第三種互動方式就派上用場了

       expect就是用來做互動用的,基本任何互動登入的場合都能使用,但是需要安裝expect包

      文法如下:

#!/bin/expectset timeout 30spawn ssh -l jikuan.zjk 10.125.25.189expect "password:"send "zjk123\r"interact
注意:expect跟bash類似,使用時要先登入到expect,所以首行要指定使用expect

在運行指令碼時候要expect  file,不能sh file了

上面語句第一句是設定逾時時間為30s,spawn是expect的語句,執行命令前都要加這句

expect "password:"這句意思是互動擷取是否返回password:關鍵字,因為在執行ssh時會返回輸入password的提示:jikuan.zjk@10.125.25.189's password:

send就是將密碼zjk123發送過去

interact代表執行完留在遠端控制台,不加這句執行完後返回本地控制台 
      








相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.