昨天乙個網友問如何能夠將輸入密碼的工作在shell裡面自動完成,研究了一下,發現這種互動式的工作,普通的shell實現不了,據說可以借助expect來搞定,所以初步學習了一下expect,成果和大家分享一下:
應用一:
實現從普通使用者「test」切換到root使用者,自動輸入root的密碼,不用在終端提示符下執行密碼輸入操作。
步驟:(1)vi autosu.sh
(2)#! /usr/bin/expect -f //
指定expect工具的路徑,如果不清楚具體路徑,可以用"which expect"命令來檢視。
spawn su - // 在expect 中用"spawn"關鍵字來呼叫命令「su - 」
expect ":" //在執行了su - 命令之後,提示輸入密碼的提示符。例如你在執行了su - 命令之後,終端裡面會出現提示「口令:」,那麼你就可以在這裡寫
expect ":",或者
expect -exact "口令:"
send "rootpasswd\r" //這裡expect用send將你的root密碼自動輸入到上面的提示符之後。
interact //操作完成。
注意:這裡強調一下執行指令碼時要注意的地方,不能按照習慣來用sh ***.sh來這行expect的程式,會提示找不到命令,因為expect用的不是bash所以會報錯。執行的時候直接./***.sh就可以了。~切記!
應用二:
從普通使用者切換到root之後,執行「ls」操作,呼叫執行aaa.sh,返回執行結果,間隔10s。
#/usr/bin/expect -f
spawn su - // 在expect 中用"spawn"關鍵字來呼叫命令「su - 」
expect ":" //在執行了su - 命令之後,提示輸入密碼的提示符。例如你在執行了su - 命令之後,終端裡面會出現提示「口令:」,那麼你就可以在這裡寫
expect ":",或者
expect -exact "口令:"
send "rootpasswd\r" //這裡expect用send將你的root密碼自動輸入到上面的提示符之後。
expect "#" //當遇到提示符以#結尾時,即為root許可權時;
send "ls\r" //expect 用spend方法呼叫ls 命令,並且回車(「\r」)
expect "#"
send "sh aaa.sh\r" //呼叫sh aaa.sh,即執行乙個指令碼檔案aaa.sh。
expect "#"
send "echo $?\r"
sleep 10
interact
先寫這些,可能有寫的不對的地方,請大家多指教~~~嘿嘿
ubuntu切換使用者root時認證失敗
原來所ubuntu一開始並沒有給root分配密碼,所以只要輸入sudo passwd,輸入新的密碼就ok了。如下 chunhui admin sudo passwd 輸入新的unix密碼 重新輸入新的unix密碼 chunhui admin su root 密碼 root admin home ch...
ubuntu切換使用者root時認證失敗
ubuntu一開始並沒有給root分配密碼,所以切換到root超級使用者,輸入任何密碼都會認證失敗。只要在命令列中輸入sudo passwd,輸入新的密碼就ok了。如下 bingo bingo thinkpad x250 sudo passwd 輸入新的unix密碼 重新輸入新的unix密碼 bin...
切換使用者時使用者名稱丟失,出現 bash 4 2
一天在登入的伺服器的時候切換使用者的時候發現,額,使用者名稱怎麼飛了,指令碼也執行不了,使用者變成了.bash4.2 經過排查後應該是誤刪除了。當前使用者的環境變數下缺少了下面這兩個檔案 bash profile bashrc 使用以下的兩條命令從 etc skel 檔案下重新拷貝乙份配置資訊到 丟...