Shell腳本交互之:自動輸入密碼

Shell腳本交互之:自動輸入密碼

版權聲明:本文爲博主原創文章,未經博主容許不得轉載。 https://blog.csdn.net/zhangjikuan/article/details/51105166

平時在控制檯輸入指令如:sudo、ssh、ftp或者修改admin權限的文件時候都會要求輸入password,可是在she'll腳本運行過程當中該如何交互實現自動輸入密碼呢?html

下面總結三種實現方法。linux

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

        shell用重定向做爲標準輸入的用法是:cmd<<delimiter ,shell 會將分界符delimiter以後直到下一個一樣的分界符以前的內容做爲輸入bash

  實現ftp自動登陸並運行ls指令的用法以下:其中zjk爲用戶名,zjk123爲密碼        ssh

 

  1.  
    ftp -i -n 192.168.21.46 <<EOF
  2.  
    user zjk zjk123
  3.  
    ls
  4.  
    EOF

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

 

       因此實現sudo自動輸入密碼的腳本以下:其中zjk123爲密碼spa

      echo 'zjk123' | sudo -S cp file1 /etc/hosts
      實現自動修改密碼的腳本寫法以下:.net

      echo 'password' | passwd -stdin username

code

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

       expect就是用來作交互用的,基本任何交互登陸的場合都能使用,可是須要安裝expect包blog

      語法以下:

 

  1.  
    #!/bin/expect
  2.  
    set timeout 30
  3.  
    spawn ssh -l jikuan.zjk 10.125.25.189
  4.  
    expect "password:"
  5.  
    send "zjk123\r"
  6.  
    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表明執行完留在遠程控制檯,不加這句執行完後返回本地控制檯 

相關文章
相關標籤/搜索