Shell?腳本自動輸入密碼的三種方式小結
注意,如果創(chuàng)建.sh文件后不可以執(zhí)行,請執(zhí)行sudo chmod 755 文件名.sh來修改權限。
方式一
使用 echo “密碼” | (管道符)
使用場景: sudo 命令
在使用普通用戶執(zhí)行 root 命令時有時候會需要輸入密碼,并且在輸入密碼后一段時間不需要再次輸入(但是不影響),這時候可以使用
echo "密碼" | sudo 命令
比如我需要一鍵清空服務器,則可以創(chuàng)建一個clear.sh文件(假使我的密碼是 123456):
echo "123456" | sudo rm -rf /*
那么在執(zhí)行的時候,我只需要./clear.sh就可以清空我的整個數據庫。
方式二
重定向
用重定向方法實現交互的前提是指令需要有參數來指定密碼輸入方式,如ftp就有-i參數來指定使用標準輸入來輸入密碼
shell用重定向作為標準輸入的用法是:cmd<<delimiter ,shell 會將分界符delimiter之后直到下一個同樣的分界符之前的內容作為輸入
使用場景:不僅僅輸入一個密碼,還需要輸入用戶名。
ftp -i -n 192.168.21.46 <<EOF user 用戶名 密碼 EOF
方式三
expect
echo + 管道符不是什么時候都可以生效(比如我寫的自動提交博客腳本最后需要輸入我的服務器的 git 倉庫密碼就不生效),因此我們可以使用 expect 方法來執(zhí)行。
set timeout 30 spawn ssh -l 用戶名 10.125.25.189 expect "password:" send "要輸入的密碼" interact
這里的語句是這樣的:
- 設置超時時間為30s
- spawn 是 expect 的起始語句,可以理解為從此處開始
- spawn 后面的語句是執(zhí)行 ssh 連接
- expect:當發(fā)現password:這個字符串后,在后方輸入send后面的內容
- send:要輸入的密碼
- interact:執(zhí)行完留在遠程控制臺,不加這句執(zhí)行完后返回本地控制臺
再舉一個例子
這個例子是我真實的腳本文件(但是磨掉了密碼),平時用于往我的服務器中提交 hexo 博客
cd /Users/jim/hexo echo '123456' | sudo -S hexo clean sudo hexo g spawn sudo -S hexo d expect "password:" send "123456"
首先進入到hexo文件夾下
因為要用到sudo 來 clean/generate/deploy我的博客,所以我這里使用一個 echo+管道符,輸入一次 sudo 命令(短時間內不需要再重復輸入,所以我只寫了一個)
generate 一下 hexo 文件
提交到遠程倉庫,這里需要輸入遠程倉庫的密碼,所以我用spawn標記這句話
當 expect(發(fā)現)到"password:"后執(zhí)行send
將我的密碼 send(發(fā)送到)到控制臺
到此這篇關于Shell 腳本自動輸入密碼的三種方式小結的文章就介紹到這了,更多相關Shell 自動輸入密碼內容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持本站!
版權聲明:本站文章來源標注為YINGSOO的內容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內容來源于網友推薦、互聯網收集整理而來,僅供學習參考,不代表本站立場,如有內容涉嫌侵權,請聯系alex-e#qq.com處理。