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

文章轉載自:http://blog.csdn.net/zhangjikuan/article/details/51105166


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

下面總結三種實現方法。

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

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

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

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. ftp -i -n 192.168.21.46 <<EOF  
  2. user zjk zjk123  
  3. ls  
  4. EOF  

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

       所以實現sudo自動輸入密碼的腳本如下:其中zjk123爲密碼

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

      echo 'password' | passwd -stdin username

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

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

      語法如下:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  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的提示:[email protected]'s password:

send就是將密碼zjk123發送過去

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


舉個例子:

ssh登陸10秒後退出

#SSH登錄10S退出
#!/bin/expect
set timeout 30
spawn ssh 10.25.2.55
expect "password:"
send "p@ssw0rd\r"
spawn sleep 10
interact
exit

/*該腳本執行 
1.需要安裝expect包
2.運行腳本使用的是expect文件名,而不是bash文件名*/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章