`
bollaxu
  • 浏览: 220464 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C++环境下的expect远程命令执行

阅读更多

首先,必须安装几个开发包,在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

分享到:
评论

相关推荐

    Tcl语言,expect脚本

    这些置换功能允许开发者在命令执行前修改命令内容。 ##### 3.1 变量置换(Variable Substitution) - 变量置换由`$`符号标记,当解释器遇到该符号时,会将变量的值替换到字符串中。例如,如果设置了变量`set x 10`...

    activetcl带Expect包的已安装文件

    例如,你可以用它来自动登录远程服务器、执行SSH命令,或者自动化FTP操作。通过结合ActiveTcl的强大功能和Expect的自动化能力,开发者可以创建高效且易于维护的系统管理工具。 总的来说,这个压缩包提供了一个集成...

    tcl8.4.11 和 expect 5.45.5

    在服务器运维中,Expect可以极大提高效率,比如自动化处理SSH登录、批量执行远程命令、系统升级、备份恢复等工作。只需编写简单的Expect脚本,就能实现复杂任务的自动化。 总的来说,Tcl和Expect是服务器运维中的...

    Linux命令大全搜索工具.pdf

    - **`cron`**、**`crontab`**:计划任务工具,用于周期性执行命令。 - **`expect`**:自动交互式脚本编写工具,常用于SSH登录自动化。 #### 三、综合运用案例 例如,假设你需要在一个Linux服务器上定期备份重要...

    unix常用命令简单说明

    最早的Unix shell,提供基本的命令执行功能。 3. **zsh**:Z shell。一种高级的Unix shell,提供了许多增强功能。 4. **cron**:定时任务调度。用于安排周期性的后台任务。 5. **at**:一次性的计划任务。用于在...

    反弹shell资源:Rust实现的简单反弹Shell例子

    在IT安全领域,反弹Shell是一种常见的攻击手段,它允许攻击者在目标系统上获取一个持久的命令执行通道,从而能够远程控制受感染的系统。在这个场景中,我们关注的是一个用Rust编程语言实现的简单反弹Shell的例子。...

    TCL脚本语言编程_tcl_TCL校本编程_

    例如,许多系统管理工具,如 Expect,就是用TCL编写,并通过扩展实现与远程系统的交互。 《TCL脚本语言编程》这本书很可能会涵盖以上这些基本概念,并通过实例引导读者实践。书中可能还会介绍一些高级主题,如错误...

    RED HAT LINUX 6大全

    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...

Global site tag (gtag.js) - Google Analytics