利用extect自动输入密码及expect的交叉编译
2016-02-27 22:46
507 查看
一、有时需要在脚本中登录需要密码验证的机器或者使用脚本ssh scp登录 复制文件时,需要输入密码,使用expect就能对不同输入进行交互。
通过简单脚本就可以实现自动输入密码了:
expect -c ”
set timeout 5;
spawn /usr/bin/scp -r /home/dev/log dev@192.168.1.192:/home/dev/
expect {
\”yes/no\” {send \”yes\r\”; exp_continue}
\”password\” {send \”yourpassword\r\”;} #修改成远程主机用户的密码
}
expect eof;”
上面脚本如果 timeout不设定就是为10秒。
由于expect是基于tcl语言的,所以移植expect前,需先交叉编译tcl
1、下载地址
tcl:http://www.tcl.tk/software/tcltk/download.html
expect:http://sourceforge.net/projects/expect/files/latest/download?source=files
2、交叉编译tcl
lingd@ubuntu:~/arm/downloadtar−zxftcl8.6.3−src.tar.gzlingd@ubuntu: /arm/download tar -zxf tcl8.6.3-src.tar.gz
lingd@ubuntu:~/arm/download cd tcl8.6.3/unix/
lingd@ubuntu:~/arm/download/tcl8.6.3/unixexportaccvfuncstrtod=yeslingd@ubuntu: /arm/download/tcl8.6.3/unix export ac_cv_func_strtod=yes
lingd@ubuntu:~/arm/download/tcl8.6.3/unix export tcl_cv_strtod_buggy=1
lingd@ubuntu:~/arm/download/tcl8.6.3/unix./configure–prefix=/home/lingd/arm/install/tcl–host=arm−linuxlingd@ubuntu: /arm/download/tcl8.6.3/unix ./configure –prefix=/home/lingd/arm/install/tcl –host=arm-linux
lingd@ubuntu:~/arm/download/tcl8.6.3/unix make
lingd@ubuntu:~/arm/download/tcl8.6.3/unixmakeinstalllingd@ubuntu: /arm/download/tcl8.6.3/unix make install
lingd@ubuntu:~/arm/download/tcl8.6.3/unix ls /home/lingd/arm/install/tcl/
bin include lib man share
lingd@ubuntu:~/arm/download/tcl8.6.3/unixls/home/lingd/arm/install/tcl/bin/tclsh8.6lingd@ubuntu: /arm/download/tcl8.6.3/unix ls /home/lingd/arm/install/tcl/bin/
tclsh8.6
lingd@ubuntu:~/arm/download/tcl8.6.3/unix ls /home/lingd/arm/install/tcl/lib/
itcl4.0.2 libtcl8.6.so libtclstub8.6.a pkgconfig sqlite3.8.7.1 tcl8 tcl8.6 tclConfig.sh tclooConfig.sh tdbc1.0.2 tdbcmysql1.0.2 tdbcodbc1.0.2 tdbcpostgres1.0.2 thread2.7.1
注意,/configure …… 之前应该先:
export tcl_cv_strtod_buggy=1
export ac_cv_func_strtod=yes
否则,交叉编译tcl时会出现以下错误(普通编译无此错误)
fixstrtod.o: In function
strtod.o:strtod.c:(.text+0x0): first defined here
http://blog.163.com/kesic2004_com/blog/static/1655294792013018104555314/
解决方法:
3、移植expect
lingd@ubuntu:~/arm/download/tcl8.6.3/unixcd../..lingd@ubuntu: /arm/download cd ../..
lingd@ubuntu:~/arm/download ls
expect5.45.tar.gz hello hello.c tcl8.6.1-src.tar.gz tcl8.6.3 tcl8.6.3-src.tar.gz type9
lingd@ubuntu:~/arm/downloadtar−zxfexpect5.45.tar.gzlingd@ubuntu: /arm/download tar -zxf expect5.45.tar.gz
lingd@ubuntu:~/arm/download cd expect5.45/
注意,expect不支持交叉编译,所以在configure,我没有用–host=arm-linux,而是先用默认的X86 gcc,等configure后再修改Makefile
configure配置参数:
1)–prefix=/home/lingd/arm/install/expect:指定安装目录
2)–with-tcl=/home/lingd/arm/install/tcl/lib:指定tcl所在目录,通常指定为tcl安装目录下的lib路径
3)–with-x=no: 告诉配置脚本,不要查找 tk (tcl 的 GUI 组件) 或 X 窗口系统库
4)–with-tclinclude=/home/lingd/arm/install/tcl/include:指定tcl头文件所在目录,通常指定为tcl安装目录下的include路径
lingd@ubuntu:~/arm/download/expect5.45./configure–prefix=/home/lingd/arm/install/expect–with−tcl=/home/lingd/arm/install/tcl/lib–with−x=no–with−tclinclude=/home/lingd/arm/install/tcl/includelingd@ubuntu: /arm/download/expect5.45 ./configure –prefix=/home/lingd/arm/install/expect –with-tcl=/home/lingd/arm/install/tcl/lib –with-x=no –with-tclinclude=/home/lingd/arm/install/tcl/include
lingd@ubuntu:~/arm/download/expect5.45 vim Makefile
将Makefile中
CC = gcc
改为
CC = arm-linux-gcc
lingd@ubuntu:~/arm/download/expect5.45makelingd@ubuntu: /arm/download/expect5.45 make
lingd@ubuntu:~/arm/download/expect5.45 make install
make install会出现错误,可以不管,只要能正常编译生成expect和libexpect5.45.so即可
3、安装
在expect源码目录下可找到expect和libexpect5.45.so
在tcl安装目录下可找到libtcl8.6.so和tcl8.6目录
将libexpect5.45.so、libtcl8.6.so和tcl8.6目录拷贝到开发板/lib目录下
将expect拷贝到/bin目录下
如果开发板无libz.so.1库,还需要拷贝libz.so.1.2.8到开发板,并创建软链接libz.so.1
通过简单脚本就可以实现自动输入密码了:
expect -c ”
set timeout 5;
spawn /usr/bin/scp -r /home/dev/log dev@192.168.1.192:/home/dev/
expect {
\”yes/no\” {send \”yes\r\”; exp_continue}
\”password\” {send \”yourpassword\r\”;} #修改成远程主机用户的密码
}
expect eof;”
上面脚本如果 timeout不设定就是为10秒。
由于expect是基于tcl语言的,所以移植expect前,需先交叉编译tcl
1、下载地址
tcl:http://www.tcl.tk/software/tcltk/download.html
expect:http://sourceforge.net/projects/expect/files/latest/download?source=files
2、交叉编译tcl
lingd@ubuntu:~/arm/downloadtar−zxftcl8.6.3−src.tar.gzlingd@ubuntu: /arm/download tar -zxf tcl8.6.3-src.tar.gz
lingd@ubuntu:~/arm/download cd tcl8.6.3/unix/
lingd@ubuntu:~/arm/download/tcl8.6.3/unixexportaccvfuncstrtod=yeslingd@ubuntu: /arm/download/tcl8.6.3/unix export ac_cv_func_strtod=yes
lingd@ubuntu:~/arm/download/tcl8.6.3/unix export tcl_cv_strtod_buggy=1
lingd@ubuntu:~/arm/download/tcl8.6.3/unix./configure–prefix=/home/lingd/arm/install/tcl–host=arm−linuxlingd@ubuntu: /arm/download/tcl8.6.3/unix ./configure –prefix=/home/lingd/arm/install/tcl –host=arm-linux
lingd@ubuntu:~/arm/download/tcl8.6.3/unix make
lingd@ubuntu:~/arm/download/tcl8.6.3/unixmakeinstalllingd@ubuntu: /arm/download/tcl8.6.3/unix make install
lingd@ubuntu:~/arm/download/tcl8.6.3/unix ls /home/lingd/arm/install/tcl/
bin include lib man share
lingd@ubuntu:~/arm/download/tcl8.6.3/unixls/home/lingd/arm/install/tcl/bin/tclsh8.6lingd@ubuntu: /arm/download/tcl8.6.3/unix ls /home/lingd/arm/install/tcl/bin/
tclsh8.6
lingd@ubuntu:~/arm/download/tcl8.6.3/unix ls /home/lingd/arm/install/tcl/lib/
itcl4.0.2 libtcl8.6.so libtclstub8.6.a pkgconfig sqlite3.8.7.1 tcl8 tcl8.6 tclConfig.sh tclooConfig.sh tdbc1.0.2 tdbcmysql1.0.2 tdbcodbc1.0.2 tdbcpostgres1.0.2 thread2.7.1
注意,/configure …… 之前应该先:
export tcl_cv_strtod_buggy=1
export ac_cv_func_strtod=yes
否则,交叉编译tcl时会出现以下错误(普通编译无此错误)
fixstrtod.o: In function
fixstrtod': fixstrtod.c:(.text+0x0): multiple definition offixstrtod’
strtod.o:strtod.c:(.text+0x0): first defined here
http://blog.163.com/kesic2004_com/blog/static/1655294792013018104555314/
解决方法:
3、移植expect
lingd@ubuntu:~/arm/download/tcl8.6.3/unixcd../..lingd@ubuntu: /arm/download cd ../..
lingd@ubuntu:~/arm/download ls
expect5.45.tar.gz hello hello.c tcl8.6.1-src.tar.gz tcl8.6.3 tcl8.6.3-src.tar.gz type9
lingd@ubuntu:~/arm/downloadtar−zxfexpect5.45.tar.gzlingd@ubuntu: /arm/download tar -zxf expect5.45.tar.gz
lingd@ubuntu:~/arm/download cd expect5.45/
注意,expect不支持交叉编译,所以在configure,我没有用–host=arm-linux,而是先用默认的X86 gcc,等configure后再修改Makefile
configure配置参数:
1)–prefix=/home/lingd/arm/install/expect:指定安装目录
2)–with-tcl=/home/lingd/arm/install/tcl/lib:指定tcl所在目录,通常指定为tcl安装目录下的lib路径
3)–with-x=no: 告诉配置脚本,不要查找 tk (tcl 的 GUI 组件) 或 X 窗口系统库
4)–with-tclinclude=/home/lingd/arm/install/tcl/include:指定tcl头文件所在目录,通常指定为tcl安装目录下的include路径
lingd@ubuntu:~/arm/download/expect5.45./configure–prefix=/home/lingd/arm/install/expect–with−tcl=/home/lingd/arm/install/tcl/lib–with−x=no–with−tclinclude=/home/lingd/arm/install/tcl/includelingd@ubuntu: /arm/download/expect5.45 ./configure –prefix=/home/lingd/arm/install/expect –with-tcl=/home/lingd/arm/install/tcl/lib –with-x=no –with-tclinclude=/home/lingd/arm/install/tcl/include
lingd@ubuntu:~/arm/download/expect5.45 vim Makefile
将Makefile中
CC = gcc
改为
CC = arm-linux-gcc
lingd@ubuntu:~/arm/download/expect5.45makelingd@ubuntu: /arm/download/expect5.45 make
lingd@ubuntu:~/arm/download/expect5.45 make install
make install会出现错误,可以不管,只要能正常编译生成expect和libexpect5.45.so即可
3、安装
在expect源码目录下可找到expect和libexpect5.45.so
在tcl安装目录下可找到libtcl8.6.so和tcl8.6目录
将libexpect5.45.so、libtcl8.6.so和tcl8.6目录拷贝到开发板/lib目录下
将expect拷贝到/bin目录下
如果开发板无libz.so.1库,还需要拷贝libz.so.1.2.8到开发板,并创建软链接libz.so.1
相关文章推荐
- [Pandas error]sys:1: DtypeWarning: Columns (0,1) have mixed types. Specify dtype option on import or set low_memory=False.
- Windows Server 2012中配置AD域服务
- 1073. Scientific Notation (20)
- Android进程与线程
- 效率:条款20 协助完成“返回值优化(RVO)”
- Windows Server 2012中安装Active Directory域服务
- C++中const和指针*的组合问题
- 详解thinkphp模型
- linux运维实战练习案例-2016年2月3日(第二次)
- Ubuntu14.04 上使用 Nginx 部署 Flask 应用
- linux 解压缩
- (十二)Spring 单元测试
- [BZOJ3101]N皇后
- python 版本traceroute和路由图片输出
- 搜索英文计算机相关资料的几个网址
- python os.system os.popen 区别【os.popen执行linux命令tail -100 filename可以打开linux中文件内容】
- (十一) Spring 声明式事务
- Android后台推送详解
- ASP.NET Web API模型验证以及异常处理方式
- sql中的三种表联结类型