在服务器开发中,有时候须要自动同步另外一个服务器的一个文件,这时候就须要经过scp来把文件复制到当前服务器目录下,如:linux
scp -r -P 2214:lex@192.168.120.204:/data/user/user.profile ./
scp须要认证用户名和密码,能够经过在对方服务器经过密钥对来验证不须要输入密码验证,但除了这个还有其余方法,可以实如今执行scp命令时,要求输入密码时可以自动输入密码吗?程序员
linux提供了一个Expect的工具,Expect是Unix系统中用来进行自动化控制和测试的软件工具,由DonLibes制做,做为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等。该工具利用Unix伪终端包装其子进程,容许任意程序经过终端接入进行自动化控制;也可利用Tk工具,将交互程序包装在X11的图形用户界面中。正则表达式
简单地说,expect是一个工具,能够根据用户设定的规则和系统进程进行自动化交互,例如远程登录的密码输入、自动化的执行远程命令。 expect的安装很简单,几个命令就搞定,具体谷歌(不是百度,程序员不要用百度)。 这是一个ssh自动登陆的脚本:bash
#!/usr/bin/expect spawn ssh root@192.168.22.194 expect "*password:" send "123\r" expect "*#" interact
以上代码有几个关键字,服务器
#!/usr/bin/bash ... expect<<- END scp -r -P 2214:lex@192.168.120.204:/data/user/user.profile ./ expect "*password" send "password" expect eof END
将expect脚本嵌入expect<<- END 和END之间便可,expect eof是指等待脚本执行结束,这里若是scp,要传输的文件略大,会断掉,由于expect有个默认的超时时间,时间到了脚本会中断,能够经过:ssh
set timeout -1 -- 没有timeout set timeout XX -- 设定具体的timeout时间(秒)
以上就是关于expect的简单使用,至于更高级的用法,须要的时候去搜索搜索就好了,都不难。工具