首先,必须安装几个开发包,在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实现 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 ...
今天小编就为大家分享一篇关于shell中使用expect命令进行远程执行命令脚本,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
主要介绍了CentOS使用expect批量远程执行脚本和命令,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
expect 说明 执行方法 expect选项 命令(参数)说明 示例
Expect是在Tcl基础上创建起来的,它还提供了一些Tcl所没有的命令,它可以用来做一些linux下无法做到交互的一些命令操作,在远程管 理方面发挥很大的作用。 spawn命令激活一个Unix程序来进行交互式的运行。 send...
centos7、centos8安装expect及tcl所需的安装包...下载完拷贝到linux系统文件目录下,unzip expect_tcl.zip,然后执行sh install_expect.sh 即可完成tcl和expect的安装 安装完毕后,可以输入expect测试能否执行expect命令
主要给大家介绍了linux expect实现登陆远程主机并执行命令的相关资料,文中给出了详细的示例代码供大家参考学习,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
主要介绍了详解Linux使用shell+expect远程登录主机的相关资料,这里提供了详细的实现步骤,需要的朋友可以参考下
注意:这里强调一下执行脚本时要注意的地方,不能按照习惯来用sh ***.sh来这行expect的程序,会提示找不到命令,因为expect用的不是bash所以会报错。执行的时候直接./***.sh就可以了。~切记! 应用二: 从...
expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信
expect+tcl工具大合集,用于远程登陆到另外一台linux机器(大家都用的起)。
在实际工作中,我们运行命令、脚本或程序时,这些命令、脚本或程序都需要从终端输入某些继续运行的指令,而这些输入都需要人为的手工进行。而利用expect,则可以根据程序的提示,模拟标准输入提供给程序,从而实现...
windows下可以使用的expect安装文件
用Expect实现Linux自动远程登陆.pdf
用于复习C++语言的常见知识点,在一个程序中体现C++中的各种知识点,用菜单的形式实现功能。
Expect手册中文版 Expect-----能与交互式程序进行“可程序化”会话的脚本语言 概述: Expect是一种能够按照脚本内容里面设定...Expect也可以直接嵌入到C或是C++程序中(这种情况是不涉及Tcl解释)。请看libexpect(3).
expect据说是交互性很强的脚本语言,但是expect依赖于tcl,但linux系统里一般不自带安装tcl,需要手动安装
linux自动化管理的必备工具,或许你需要perl,但个人觉得expect更好,针对性强。
在实际工作中,我们运行命令、脚本或程序时,这些命令、脚本或程序都需要从终端输入某些继续运行的指令,而这些输入都需要人为的手工进行。而利用expect,则可以根据程序的提示,模拟标准输入提供给程序,从而实现...