このエントリーをはてなブックマークに追加

su で expect を使って簡単に root になる方法

exepct 便利ですよね。expect を使うと、コマンドラインの対話を自動的に行うことが出来ます。

例えば、/home/foo/password に su のパスワードが書かれている場合、次のようなスクリプトを作成して実行すると一発で su することができます。


#!/usr/bin/expect -f

set password [exec cat /home/foo/password | head -1 | tr -s " " | cut -d " " -f 2]

spawn su -
expect "*assword:" { send "$password\r" }

interact

ポイントは、set で exec を使ってコマンドラインの実行結果をパスワードに入れているところ、上記の例であと /home/foo/password には複数行で各ユーザごとのパスワードがかかれていて、1行目に root のパスワードが書かれていることになります。
そして、interact で処理を継続しているところがポイントです。

また、expect 用のスクリプトを一から手動で作成するのは、すこし不便ですが、autoexpect を使うと expect を使うスクリプトを自動生成することができて便利です。
例えば、上記の expect のもとを作成する場合には、次のようにします。


$ autoexpect -c su
autoexpect started, file is script.exp
Password:
foo# exit
exit
autoexpect done, file is script.exp
$

そうすると、カレントディレクトリ以下に script.exp というファイルが生成されています。このファイルには、制御コードなどを含まれていたり、たくさんの分かりやすいコメントがかかれているので、ちゃんと整理して expect なスクリプトを作成すると便利です。