利用extect自动输入密码及expect的交叉编译

本文介绍如何使用expect脚本自动处理SSH和SCP过程中的密码输入,包括expect的基础使用方法及如何通过交叉编译移植到嵌入式设备。

一、有时需要在脚本中登录需要密码验证的机器或者使用脚本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/download tarzxftcl8.6.3src.tar.gzlingd@ubuntu: /arm/download cd tcl8.6.3/unix/
lingd@ubuntu:~/arm/download/tcl8.6.3/unix exportaccvfuncstrtod=yeslingd@ubuntu: /arm/download/tcl8.6.3/unix export tcl_cv_strtod_buggy=1
lingd@ubuntu:~/arm/download/tcl8.6.3/unix ./configureprefix=/home/lingd/arm/install/tclhost=armlinuxlingd@ubuntu: /arm/download/tcl8.6.3/unix make
lingd@ubuntu:~/arm/download/tcl8.6.3/unix makeinstalllingd@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/unix ls/home/lingd/arm/install/tcl/bin/tclsh8.6lingd@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 of
fixstrtod’
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/unix 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/download tarzxfexpect5.45.tar.gzlingd@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 ./configureprefix=/home/lingd/arm/install/expectwithtcl=/home/lingd/arm/install/tcl/libwithx=nowithtclinclude=/home/lingd/arm/install/tcl/includelingd@ubuntu: /arm/download/expect5.45 vim Makefile
将Makefile中
CC = gcc
改为
CC = arm-linux-gcc
lingd@ubuntu:~/arm/download/expect5.45 makelingd@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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值