expect是一种能够按照脚本内容里面设定的方式与交互式程序进行“会话”的程序。根据脚本内容,Expect可以知道程序会提示或反馈什么内容以及 什么是正确的应答。它是一种可以提供“分支和嵌套结构”来引导程序流程的解释型脚本语言。 shell功能很强大,但是不能实现有交互功能的多机器之前的操作,例如ssh和ftp.而expect可以帮助我们来实现.
一,安装expect
- yum install expect
其实expect根bash形势上差不多的.
二,实例
1,ssh实现自动登录,并停在登录服务器上
- #!/usr/bin/expect -f
- set ip [lindex $argv 0 ] //接收第一个参数,并设置IP
- set password [lindex $argv 1 ] //接收第二个参数,并设置密码
- set timeout 10 //设置超时时间
- spawn ssh root@$ip //发送ssh请滶
- expect { //返回信息匹配
- "*yes/no" { send "yes\r"; exp_continue} //第一次ssh连接会提示yes/no,继续
- "*password:" { send "$password\r" } //出现密码提示,发送密码
- }
- interact //交互模式,用户会停留在远程服务器上面.
运行结果如下:
- root@ubuntu:/home/zhangy# ./test.exp 192.168.1.130 admin
- spawn ssh root@192.168.1.130
- Last login: Fri Sep 7 10:47:43 2012 from 192.168.1.142
- [root@linux ~]#
这个例子有统一的接口,根据IP和密码可以连接到不同的机器.如果你嫌输入IP和密码麻烦,看下面的例子
- #!/usr/bin/expect -f
- set ip 192.168.1.130
- set password admin
- set timeout 10
- spawn ssh root@$ip
- expect {
- "*yes/no" { send "yes\r"; exp_continue}
- "*password:" { send "$password\r" }
- }
- interact
运行结果如下:
- root@ubuntu:/home/zhangy# ./web.exp
- spawn ssh root@192.168.1.130
- Last login: Fri Sep 7 12:59:02 2012 from 192.168.1.142
- [root@linux ~]#
2,ssh远程登录到服务器,并且执行命令,执行完后并退出
- #!/usr/bin/expect -f
- set ip 192.168.1.130
- set password admin
- set timeout 10
- spawn ssh root@$ip
- expect {
- "*yes/no" { send "yes\r"; exp_continue}
- "*password:" { send "$password\r" }
- }
- expect "#*"
- send "pwd\r"
- send "exit\r"
- expect eof
运行结果如下:
- root@ubuntu:/home/zhangy# ./test3.exp
- spawn ssh root@192.168.1.130
- root@192.168.1.130's password:
- Last login: Fri Sep 7 14:05:07 2012 from 116.246.27.90
- [root@localhost ~]# pwd
- /root
- [root@localhost ~]# exit
- logout
- Connection to 192.168.1.130 closed.
3,远程登录到ftp,并且下载文件
- #!/usr/bin/expect -f
- set ip [lindex $argv 0 ]
- set dir [lindex $argv 1 ]
- set file [lindex $argv 2 ]
- set timeout 10
- spawn ftp $ip
- expect "Name*"
- send "zwh\r"
- expect "Password:*"
- send "zwh\r"
- expect "ftp>*"
- send "lcd $dir\r"
- expect {
- "*file" { send_user "local $_dir No such file or directory";send "quit\r" }
- "*now*" { send "get $dir/$file $dir/$file\r"}
- }
- expect {
- "*Failed" { send_user "remote $file No such file";send "quit\r" }
- "*OK" { send_user "$file has been download\r";send "quit\r"}
- }
- expect eof
运行结果如下:
- root@ubuntu:/home/zhangy# ./test2.exp 192.168.1.130 /var/www/www aaa.html
- spawn ftp 192.168.1.130
- Connected to 192.168.1.130.
- 220 (vsFTPd 2.0.5)
- Name (192.168.1.130:root): zwh
- 331 Please specify the password.
- Password:
- 230 Login successful.
- Remote system type is UNIX.
- Using binary mode to transfer files.
- ftp> lcd /var/www/www
- Local directory now /var/www/www
- ftp> get /var/www/www/aaa.html /var/www/www/aaa.html
- local: /var/www/www/aaa.html remote: /var/www/www/aaa.html
- 200 PORT command successful. Consider using PASV.
- 150 Opening BINARY mode data connection for /var/www/www/aaa.html (66 bytes).
- 226 File send OK.
- 66 bytes received in 0.00 secs (515.6 kB/s)
- quit aaa.html has been download
- 221 Goodbye.
相关推荐
Expect 实现 Linux 自动远程登录技术 Expect 是 Unix 系统中的一种软件工具,用于自动化控制和测试,常...Expect 是一种功能强大且灵活的自动化工具,能够实现 Linux 的远程登录自动化,提高远程操作的效率和安全性。
标题中的"Linux ssh登录远程服务器 expect"指的就是利用`expect`脚本来实现Linux系统中SSH登录的自动化。这种方式在批量管理多台服务器、持续集成环境或者需要定期运行远程任务的场景下非常有用。 `expect`的基本...
Linux Expect 是一个强大的工具,它基于Tcl语言,专门用于自动化需要用户交互的任务,例如SSH登录、FTP传输等。在很多场景中,手动输入用户名和密码进行登录或执行远程命令可能会变得繁琐,尤其是在频繁操作的情况下...
除了基本的SSH登录,`expect`还能应用于各种场景,例如处理telnet会话、自动安装软件(通过交互式安装程序)、自动化FTP或SFTP传输等。由于其灵活性和强大的功能,`expect`在系统管理和持续集成流程中非常有用。 在...
Expect 是一种自动化交互式命令行工具,它主要用于在 Linux 或 Unix 系统中控制交互式应用,例如 Telnet、SSH、FTP 和其他需要与用户进行交互的应用程序。Expect 的核心功能包括自动应答、流程控制以及对命令行应用...
Linux Expect 是一个强大的脚本工具,它允许程序员或者系统管理员自动化与交互式应用程序的交互,如telnet、ftp、passwd等。在这个特定的场景中,我们利用 Expect 脚本来实现自动登录到交换机并保存配置。这种方法...
这种方式使得我们能够编写脚本来自动处理那些需要人机交互的情况,比如SSH登录、FTP传输、软件安装等。 在使用`expect`前,我们需要先安装TCL和`expect`。从提供的压缩包文件名来看,我们有tcl8.4.20-src.tar.gz和...
在Linux环境中,Expect被设计用来自动交互式地控制程序,比如自动登录远程服务器、执行SSH命令、自动化脚本测试等。而TCL是一种动态编程语言,Expect就是基于TCL构建的,它为TCL增加了对进程控制和输入/输出流的处理...
Expect是Tcl语言的一个扩展,由Don Libes在1990年代初开发,用于自动化那些需要用户交互的程序,例如SSH登录、FTP传输等。通过expect,你可以编写脚本,预设好程序需要的输入,然后让expect自动完成这些输入,从而...
expect的出现解决了许多自动化任务的难题,尤其是在需要与系统进行人机交互的情况下,如SSH登录、FTP传输、系统管理任务等。通过expect,用户可以编写一个脚本,预先定义好一系列输入和期望的输出,然后由expect自动...
Expect是基于Tcl语言的一个扩展,专为自动化交互式应用程序而设计,比如登录、FTP传输、SSH连接等。在本教程中,我们将深入探讨 Expect 的基本概念、语法和实际应用,帮助你更好地理解和掌握这个强大的工具。 一、...
Linux中的`expect`工具是一个强大的自动化脚本工具,主要用于与命令行交互,特别是与需要用户输入的程序进行自动化通信,如SSH登录、FTP传输等。它基于TCL语言,因此在使用`expect`之前需要先确保系统安装了TCL和...
`expect`工具正是这样一个强大的自动化脚本工具,尤其在处理交互式协议如SSH(Secure Shell)、FTP(File Transfer Protocol)和TELNET时,它能模拟用户输入,使得自动化过程变得更加简单。本文将深入探讨`expect`...
在Linux和Unix操作系统中,自动化运维是提升效率和...通过深入学习和实践,Expect和Tcl的组合能成为Linux和Unix管理员的强大助手,实现高效、可靠的自动化运维。这个安装包提供的资源将帮助你快速上手并掌握这项技术。
9. **与Unix/Linux工具集成**:`expect`可以与各种Unix/Linux工具结合使用,如`ssh`、`ftp`、`telnet`等,实现自动化任务。 10. **学习资源**:要深入学习`expect`,可以查阅其官方文档,以及在线教程和论坛,如...
除了基本的SSH自动登录外,`expect`还可以用于自动化其他类型的交互式任务,如FTP登录、Telnet会话等。通过灵活运用`expect`的各种功能,可以大大简化日常运维工作中的重复性任务,提高工作效率。 总之,通过使用`...
在进行Linux系统管理或自动化任务部署时,经常需要使用SSH(Secure Shell)协议远程连接到其他服务器上执行命令或管理操作。出于安全考虑,SSH在连接远程主机时会要求输入密码,但在脚本自动化场景中,这种交互式...
It contains tools for automating interactive applications such as telnet, ftp, passwd, fsck, rlogin, tip, etc. Expect is also useful for testing these same applications as well as easing all sorts of...