1.expect预期交互控制(免人工交互)
expect:基于TCL编写的自动交互式程序,为ftp/SSH等交互过程自动输送预先准备的文件或指令,则无需人工干预
触发的依据是预期会出现的特征提示文本
#yum -y install expect --需要安装(依赖环境TCL包)
2.预期交互实现过程
#expect
>spawn ftp 192.168.8.129 --创建ftp交互登录过程
>expect "):" --预期出现):登录提示
>send "ftp\r" --发送用户名ftp
>expect "Password:" --预期出现验证密码提示
>send "123456\r" --发送密码123456
>expect "ftp>" --预期出现ftp>状态提示
>send "quit\r" --发送退出指令
>exit --退出expect交互环境
3.自动交互
expect 指令文件 --进行加载,从而实现自动交互
#vi mike-ftp.sh --自动上传(免交互ftp上传下载)
spawn ftp 192.168.8.129 --创建ftp交互登录过程
expect "):" --预期出现):登录提示
send "mike\r" --发送用户名ftp
expect "Password:" --预期出现验证密码提示
send "123456\r" --发送密码123456
expect "ftp>"
sed "put install.log\r"
expect "ftp>" --预期出现ftp>状态提示
send "quit\r" --发送退出指令
#expect mike-ftp.sh
4.ftp自动登录脚本:(免交互)
调整执行方式:添加Sha-Bang环境声明
vim mike-ftp.sh
#!/usr/bin/expect
spawn ftp 192.168.8.129 --创建ftp交互登录过程
expect "):" --预期出现):登录提示
send "mike\r" --发送用户名ftp
expect "Password:" --预期出现验证密码提示
send "123456\r" --发送密码123456
expect "ftp>"
sed "put install.log\r"
expect "ftp>" --预期出现ftp>状态提示
send "quit\r" --发送退出指令
chmod +x mike-ftp.sh &&./mike-ftp.sh 执行脚本
例子应用:expect实现ssh免登陆交互
编写一个expect脚本,实现ssh登录自动交互
目标主机192.168.8.130,用户名mike 密码123456
登录后在目标主机建立测试文件/tmp/mike.txt
#!/usr/bin/expect
set host 47.244.15.241 --定义变量
set user root
set password "Hu910921"
spawn ssh $user@$host --创建交互式进程
expect "password:" { send "$password\r" } --自动发送密码
expect "\[$user\@"{ send "pwd > /tmp/$user.txt;exit\r"]" --发送交互式指令
expect eof --结束指令
5.例子:SSH免交互,查看磁盘分区df -h
(指定用户登录)
yum -y install expect
vi expect_ssh.sh
#!/usr/bin/expect
set ip 47.244.15.241
set user root
set pass "Hu910921"
spawn ssh $user@$ip
expect "password:" {send "$pass\r"}
expect "$user@*" {send "df -h\r"}
expect "$user@*" {send "exit\r"}
expect eof
spawn:执行一个命令
expect "":匹配输出的内容
\r:可以理解为回车
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App