`
bollaxu
  • 浏览: 219574 次
  • 性别: 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

分享到:
评论

相关推荐

    expect在windows下使用的

    1. **命令行交互**:`Expect`脚本在命令行环境下运行,通过`spawn`命令启动一个进程(如SSH连接、telnet会话等),然后发送和接收数据。 2. **期望与匹配**:`expect`命令用于设置期望的输出,可以是精确的字符串、...

    shell中使用expect命令进行远程执行命令脚本

    在Linux系统管理中,有时我们需要自动化执行远程服务器上的任务,比如执行命令或脚本,而`expect`命令正为此目的而设计。`expect`是一个TCL语言的扩展,用于自动处理交互式应用程序,如SSH、telnet等。通过使用`...

    CentOS使用expect批量远程执行脚本和命令

    `expect`是一个强大的自动化交互式程序的工具,它能够模拟用户与命令行的交互,使得我们可以通过脚本批量执行远程命令和脚本。在本文中,我们将深入探讨如何在`CentOS`中利用`expect`进行批量远程操作。 首先,确保...

    linux下expect的安装方法

    5. 安装完成后,`/tools/bin`目录下应该出现了`expect`命令,你可以通过运行`expect`来测试是否安装成功。 至此,`expect`已经安装完成,你可以开始编写和运行`expect`脚本来自动化Linux系统的各种交互式任务。`...

    expect交互式执行网络命令

    expect实现 shell 交互式网络命令,插件安装: tar xzvf expect5.45.tar.gz cd expect5.45 ./configure --prefix=/usr/expect --with-tcl=/usr/tcl/lib --with-tclinclude=../tcl8.4.11/generic make make install ...

    expect+tcl工具大合集,用于远程登陆到另外一台linux机器。

    在这个脚本中,`spawn`命令启动一个新的进程(这里是SSH),`expect`命令等待指定的字符串(如“password:”),`send`命令发送输入(如密码和命令),最后`expect`再次等待提示符以确认命令已执行。 总结起来,`...

    Linuxssh登录远程服务器 expect

    SSH(Secure Shell)是Linux环境下用于远程登录的一种安全协议,它允许用户通过加密的方式连接到另一台计算机,进行命令执行、文件传输等操作。当需要自动化这些过程时,`expect`工具就显得尤为重要。`expect`基于...

    expect window版本

    这个"expect window版本"可能是 Expect 的一个移植版或兼容版本,专为 Windows 用户设计,允许他们在 Windows 环境下编写和运行 Expect 脚本来自动执行命令行任务。 Expect 的核心概念是模拟用户与终端之间的交互,...

    Linux expect交互命令使用详解.docx

    2. 使用`-c`选项执行命令:`expect -c '命令'` 此外,`expect`还有一些选项用于特定场景: - `-d`: 开启调试模式,输出诊断信息。 - `-D`: 启用调试器。 - `-f`: 从指定文件读取命令。 - `-i`: 交互式输入命令。 - ...

    linux expect安装及expect,tcl安装包

    你可以通过运行 `expect` 命令来测试是否安装成功。 压缩包中的`check.conf`可能是用于配置或检查环境的文件,具体用途需根据文件内容来确定。 `scp_auto.sh` 是一个自动化SCP文件传输的脚本,可以用来批量复制...

    linux expect实现登陆远程主机并执行命令示例代码

    Linux Expect 是一个强大的工具,它允许自动化与交互式应用程序的交互,特别适用于自动化登录和执行命令在远程服务器上的任务。这个工具使用Tcl语言作为基础,并且提供了一个友好的接口来处理诸如SSH这样的协议,...

    远程调用linux命令的demo

    10. **sudo和su命令**:在远程执行命令时,可能需要提升权限,sudo用于以其他用户身份运行命令,su则用于切换用户。 11. **日志记录和错误处理**:在远程调用命令时,正确记录日志和处理异常非常重要,这有助于排查...

    expect5.43.0和tcl8.4.11.zip

    例如,你可以编写一个`Expect`脚本来自动连接到远程服务器,验证身份,然后执行一系列命令,最后安全退出。 在使用`Expect`前,必须确保系统已经安装了`TCL`,因为`Expect`是基于`TCL`的。安装过程通常涉及下载`TCL...

    用Expect实现Linux自动远程登陆.pdf

    Expect 实现 Linux 自动远程登录技术 Expect 是 Unix 系统中的一种软件工具,用于自动化控制和测试,常用于交互式软件中,如 telnet、ftp、passwd、fsck、rlogin、ssh 等。通过 Expect,可以实现 Linux 的自动远程...

    RHEL 7.8安装expect及使用.docx

    Expect 可以用来实现自动交互功能,例如自动登录、自动执行命令等。Expect 也可以用来实现简单的 BBS 聊天机器人。 6. Tcl 的安装 Tcl 是 Expect 的依赖项,需要先安装 Tcl 才能安装 Expect。可以使用源码包方式...

    详解Linux使用shell+expect远程登录主机

    在Linux环境下,使用Shell脚本结合Expect工具进行远程登录是一种高效且灵活的方式。本文将详细介绍如何利用这两种工具实现自动化远程登录,并提供具体的实现步骤及注意事项。 #### 一、理解Shell与Expect **Shell*...

    expect-5.21 for Windows 附带安装需要的组件ActiveTcl-8.6.12

    例如,你可能编写一个expect脚本来自动登录SSH服务器,执行远程命令,然后退出,全程无需手动干预。 在Windows环境下,expect-5.21结合ActiveTcl-8.6.12,不仅能够帮助开发者进行复杂的脚本编写,还能为系统管理员...

    python执行scp命令拷贝文件及文件夹到远程主机的目录方法

    总结来说,Python通过`subprocess`模块和`expect`工具实现SCP命令的执行,提供了在脚本环境中安全、自动化地传输文件到远程主机的功能。这种方式适用于需要在不暴露密码的情况下执行文件传输的场景,如持续集成流程...

Global site tag (gtag.js) - Google Analytics