Hong's Blog
Be Agile. Be Smart. Be Visionary. Be Dedicated.
expect是Unix/Linux上一个用于自动化(automating)交互程序的操作的工具。典型的交互程序有ftp,ssh,telnet等。 expect可以启动(spawn)一个交互程序,然后监听/等待(expect)它的输出;当监听到指定的输出时,再发送(send)相应的消息给这个程序。
自然地,expect可以很轻松地完成一些自动输入密码的任务,省去每次人工输入的烦恼。像bash一样,expect也有它自己的脚本语言。 下面给出一个免密码运行su(准确地说是执行su命令时让expect自动输入密码)的expect脚本。
spawn su expect "Password:" send "123456\r" #发送密码,记得加上\r来模拟人类的回车动作 expect "\$ " #su成功后开始等待终端提示符,我的终端提示符是$,这个符号需要转义(貌似 #我的expect有个bug,仅仅转义$并不行,必须后面跟个空格);你的root终端 #提示符可能是“#”等其他字符,请相应地改成 expect "# " send "pwd\r" #现在我们可以以root身份执行命令了;比如执行pwd命令;记得加上\r,需要有一个回车动作 expect "\$ " send "cmd_2\r" #以root身份执行其它命令... expect "\$ " #记得加上这个expect语句,要不然可能还没有看到“cmd_2”命令的输出,expect脚本就 #已经退出了。这个expect语句会让expect程序等待若干秒,然后再(超时)退出。
假设这个文件叫passwordless_su.expect,运行如下命令就可以自动登录切换成root并执行指定命令,
expect passwordless_su.expect
当然,假设你的expect程序位于/usr/bin/expect,也可以在这个脚本的第一行加上,
#!/usr/bin/expect
并且为这个脚本加上执行权限(chmod u+x passwordless_su.expect),然后直接执行它。
chmod u+x passwordless_su.expect
参考资料, The Expect Home Page Getting Started With Expect
如果你觉得这篇文章对你有用,可以微信扫一扫表示🙏 / If you find this post is useful to you, buy me 🍶 via Wechat
一个自动化输入su密码的expect脚本
expect是Unix/Linux上一个用于自动化(automating)交互程序的操作的工具。典型的交互程序有ftp,ssh,telnet等。 expect可以启动(spawn)一个交互程序,然后监听/等待(expect)它的输出;当监听到指定的输出时,再发送(send)相应的消息给这个程序。
自然地,expect可以很轻松地完成一些自动输入密码的任务,省去每次人工输入的烦恼。像bash一样,expect也有它自己的脚本语言。 下面给出一个免密码运行su(准确地说是执行su命令时让expect自动输入密码)的expect脚本。
假设这个文件叫passwordless_su.expect,运行如下命令就可以自动登录切换成root并执行指定命令,
当然,假设你的expect程序位于/usr/bin/expect,也可以在这个脚本的第一行加上,
并且为这个脚本加上执行权限(
chmod u+x passwordless_su.expect
),然后直接执行它。参考资料,
The Expect Home Page
Getting Started With Expect
如果你觉得这篇文章对你有用,可以微信扫一扫表示🙏 / If you find this post is useful to you, buy me 🍶 via Wechat