首先,必须安装几个开发包,在centos/fedora下,可以使用yum安装:
$ yum -y install tcl-devel expect-devel
装完以后,就可以使用expect来写代码了,从网上拉下来一段代码,稍微修改了一下:
#include <tcl.h>
#include <expect.h>
#include <stdio.h>
#include <unistd.h>
#include <iostream>
#include <expect_tcl.h>
using namespace std;
int main()
{
extern int exp_timeout;
exp_timeout = 100;
Tcl_Interp *tcl;
tcl = Tcl_CreateInterp();
if (Expect_Init(tcl) != TCL_OK)
{
puts("failure");
return 1;
}
//start a connection with remote ssh server
int fd = exp_spawnl("ssh", "ssh", "-p 22", "username@server_address", "echo start;ls ~;", (char *)0);
if(fd < 0)
{
cout<<"Fail to ssh"<<endl;
return -1;
}
int loop = 1;
int result;
while(loop)
{
//predefine some expected responses
result = exp_expectl(fd, exp_glob, "*assword: ", 1, exp_exact, "Permission denied, please try again.", 2, exp_regexp, "(The authenticity of host)(.)*(Are you sure you want to continue connecting (yes/no)?)", 3, exp_end);
char pas[] = "your_password\n";
switch(result)
{
case 1:
write(fd, pas, sizeof(pas) - 1);
break;
case 2:
cout <<"wrong password"<<endl;
break;
case 3:
cout<<"connect security"<<endl;
write(fd, "yes\n", 4);
break;
case EXP_EOF:
cout << "EOF\n";
loop = 0;
break;
case EXP_TIMEOUT:
cout<<"Time out\n";
loop = 0;
break;
default:
cout<<"logged in "<<result<<endl;
loop = 0;
break;
}
}
Tcl_DeleteInterp(tcl);
}
保存为test-expect.cpp, 编译:
g++ test-expect.cpp -o test-expect -lexpect5.43 -ltcl8.4
执行./test-expect,得到远程root用户的根目录列表。
远程命令的标准输出存在exp_buffer缓冲区。
详细的手册可以参考http://www.cims.nyu.edu/cgi-systems/man.cgi?section=3&topic=libexpect
分享到:
相关推荐
这些置换功能允许开发者在命令执行前修改命令内容。 ##### 3.1 变量置换(Variable Substitution) - 变量置换由`$`符号标记,当解释器遇到该符号时,会将变量的值替换到字符串中。例如,如果设置了变量`set x 10`...
例如,你可以用它来自动登录远程服务器、执行SSH命令,或者自动化FTP操作。通过结合ActiveTcl的强大功能和Expect的自动化能力,开发者可以创建高效且易于维护的系统管理工具。 总的来说,这个压缩包提供了一个集成...
在服务器运维中,Expect可以极大提高效率,比如自动化处理SSH登录、批量执行远程命令、系统升级、备份恢复等工作。只需编写简单的Expect脚本,就能实现复杂任务的自动化。 总的来说,Tcl和Expect是服务器运维中的...
- **`cron`**、**`crontab`**:计划任务工具,用于周期性执行命令。 - **`expect`**:自动交互式脚本编写工具,常用于SSH登录自动化。 #### 三、综合运用案例 例如,假设你需要在一个Linux服务器上定期备份重要...
最早的Unix shell,提供基本的命令执行功能。 3. **zsh**:Z shell。一种高级的Unix shell,提供了许多增强功能。 4. **cron**:定时任务调度。用于安排周期性的后台任务。 5. **at**:一次性的计划任务。用于在...
在IT安全领域,反弹Shell是一种常见的攻击手段,它允许攻击者在目标系统上获取一个持久的命令执行通道,从而能够远程控制受感染的系统。在这个场景中,我们关注的是一个用Rust编程语言实现的简单反弹Shell的例子。...
例如,许多系统管理工具,如 Expect,就是用TCL编写,并通过扩展实现与远程系统的交互。 《TCL脚本语言编程》这本书很可能会涵盖以上这些基本概念,并通过实例引导读者实践。书中可能还会介绍一些高级主题,如错误...
4.8 使用Red Hat的wmconfig命令 54 4.9 个人化的X资源文件 54 4.10 使用xdm 55 4.11 XFree86疑难解答 57 4.12 小结 57 第5章 窗口管理器 58 5.1 GNOME X环境 59 5.1.1 什么是GNOME 59 5.1.2 GNOME 安装组件 59 5.1.3...