使用expect自动化输入密码切换用户和执行命令

4星 · 超过85%的资源 需积分: 16 41 下载量 58 浏览量 更新于2024-09-15 3 收藏 2KB TXT 举报
"使用expect实现自动化输入密码进行用户切换及执行命令" expect是一个Tcl语言扩展,用于自动化处理交互式应用程序,特别是在Unix/Linux环境中。它允许脚本模拟用户输入,尤其是涉及密码或需要用户交互的情况。在给定的文件中,有两个应用示例展示了如何使用expect来自动切换用户并执行特定的命令。 应用一: 这个应用演示了如何从普通用户“test”自动切换到root用户,同时自动输入root密码。首先,创建一个名为autosu.sh的脚本,使用`#!/usr/bin/expect -f`作为shebang行来指定使用expect解释器。然后,`spawn su -`启动一个新的进程执行`su -`命令,以切换到root用户。`expect ":"`等待出现密码提示符,通常显示为":"或"口令:"。接着,`send "rootpasswd\r"`发送root密码(假设是"rootpasswd"),并加上`\r`模拟回车键。最后,`interact`允许脚本与新会话进行交互,但在这个例子中,交互操作已完成,所以脚本结束。 应用二: 这个应用扩展了第一个示例,不仅切换到root用户,还执行了"ls"命令以及调用了名为"aaa.sh"的脚本。在相同的脚本结构基础上,`expect "#"`等待root用户的提示符(通常以"#"表示)。`send "ls\r"`执行`ls`命令,`send "sh aaa.sh\r"`则执行脚本"aaa.sh"。之后,`send "echo $?\r"`会打印出上一个命令(这里是"aaa.sh")的退出状态码。`sleep 10`延迟10秒,最后`interact`再次结束脚本。 在运行这些expect脚本时,需要注意的是,由于它们不是bash脚本,因此不能用`sh ***.sh`来执行。正确的做法是通过使脚本具有可执行权限(`chmod +x ***.sh`)然后直接运行,如`./***.sh`。 expect工具在需要自动化处理交互式任务时非常有用,尤其是在需要输入密码或响应特定提示时。这两个示例展示了expect在系统管理自动化中的基本用法,有助于提高效率和减少人为错误。