Shell?腳本自動(dòng)輸入密碼的三種方式小結(jié)
注意,如果創(chuàng)建.sh文件后不可以執(zhí)行,請(qǐng)執(zhí)行sudo chmod 755 文件名.sh來修改權(quán)限。
方式一
使用 echo “密碼” | (管道符)
使用場(chǎng)景: sudo 命令
在使用普通用戶執(zhí)行 root 命令時(shí)有時(shí)候會(huì)需要輸入密碼,并且在輸入密碼后一段時(shí)間不需要再次輸入(但是不影響),這時(shí)候可以使用
echo "密碼" | sudo 命令
比如我需要一鍵清空服務(wù)器,則可以創(chuàng)建一個(gè)clear.sh文件(假使我的密碼是 123456):
echo "123456" | sudo rm -rf /*
那么在執(zhí)行的時(shí)候,我只需要./clear.sh就可以清空我的整個(gè)數(shù)據(jù)庫。
方式二
重定向
用重定向方法實(shí)現(xiàn)交互的前提是指令需要有參數(shù)來指定密碼輸入方式,如ftp就有-i參數(shù)來指定使用標(biāo)準(zhǔn)輸入來輸入密碼
shell用重定向作為標(biāo)準(zhǔn)輸入的用法是:cmd<<delimiter ,shell 會(huì)將分界符delimiter之后直到下一個(gè)同樣的分界符之前的內(nèi)容作為輸入
使用場(chǎng)景:不僅僅輸入一個(gè)密碼,還需要輸入用戶名。
ftp -i -n 192.168.21.46 <<EOF user 用戶名 密碼 EOF
方式三
expect
echo + 管道符不是什么時(shí)候都可以生效(比如我寫的自動(dòng)提交博客腳本最后需要輸入我的服務(wù)器的 git 倉庫密碼就不生效),因此我們可以使用 expect 方法來執(zhí)行。
set timeout 30 spawn ssh -l 用戶名 10.125.25.189 expect "password:" send "要輸入的密碼" interact
這里的語句是這樣的:
- 設(shè)置超時(shí)時(shí)間為30s
- spawn 是 expect 的起始語句,可以理解為從此處開始
- spawn 后面的語句是執(zhí)行 ssh 連接
- expect:當(dāng)發(fā)現(xiàn)password:這個(gè)字符串后,在后方輸入send后面的內(nèi)容
- send:要輸入的密碼
- interact:執(zhí)行完留在遠(yuǎn)程控制臺(tái),不加這句執(zhí)行完后返回本地控制臺(tái)
再舉一個(gè)例子
這個(gè)例子是我真實(shí)的腳本文件(但是磨掉了密碼),平時(shí)用于往我的服務(wù)器中提交 hexo 博客
cd /Users/jim/hexo echo '123456' | sudo -S hexo clean sudo hexo g spawn sudo -S hexo d expect "password:" send "123456"
首先進(jìn)入到hexo文件夾下
因?yàn)橐玫絪udo 來 clean/generate/deploy我的博客,所以我這里使用一個(gè) echo+管道符,輸入一次 sudo 命令(短時(shí)間內(nèi)不需要再重復(fù)輸入,所以我只寫了一個(gè))
generate 一下 hexo 文件
提交到遠(yuǎn)程倉庫,這里需要輸入遠(yuǎn)程倉庫的密碼,所以我用spawn標(biāo)記這句話
當(dāng) expect(發(fā)現(xiàn))到"password:"后執(zhí)行send
將我的密碼 send(發(fā)送到)到控制臺(tái)
到此這篇關(guān)于Shell 腳本自動(dòng)輸入密碼的三種方式小結(jié)的文章就介紹到這了,更多相關(guān)Shell 自動(dòng)輸入密碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
bash scp command not found的解決方法
今天在一系統(tǒng)上運(yùn)行bash scp提示command not found,經(jīng)過如下方法解決了,需要的朋友可以參考下2013-03-03Shell實(shí)現(xiàn)程序造死循環(huán)的幾種方法示例
在linux下編程的程序猿都知道shell腳本,就算你不怎么熟悉,也應(yīng)該聽過的吧!那在shell腳本中的死循環(huán)該怎么寫呢?下面這篇文章就來給大家介紹了關(guān)于Shell如何實(shí)現(xiàn)讓程序造死循環(huán)的幾種方法,需要的朋友可以參考下。2017-08-08shell腳本實(shí)現(xiàn)實(shí)時(shí)檢測(cè)文件變更
這篇文章主要介紹了shell腳本實(shí)現(xiàn)實(shí)時(shí)檢測(cè)文件變更,本文直接給出實(shí)現(xiàn)代碼和使用方法,以及svn下的實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-05-05Linux定時(shí)執(zhí)行任務(wù)at和crontab命令詳解
本篇文章主要介紹了Linux定時(shí)執(zhí)行任務(wù)at和crontab命令這兩個(gè)命令的基本用法和區(qū)別,一起學(xué)習(xí)下。2017-11-11如何實(shí)現(xiàn)ls命令在Win7下正常運(yùn)行
ls命令是Linux系統(tǒng)下最常用的命令之一,使用ls指令可列出目錄中的內(nèi)容,包括文件和子目錄的名稱,下面通過本文給大家分享如何實(shí)現(xiàn)ls命令在Win7下正常運(yùn)行,需要的朋友參考下吧2018-03-03Shell獲取當(dāng)前正在執(zhí)行腳本的絕對(duì)路徑
本文主要介紹了Shell獲取當(dāng)前正在執(zhí)行腳本的絕對(duì)路徑,主要有三種方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09