用expect 實現切換使用者時自動輸入密碼

2021-08-26 01:26:13 字數 1329 閱讀 8266

昨天乙個網友問如何能夠將輸入密碼的工作在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 檔案下重新拷貝乙份配置資訊到 丟...