使用sftp,需要使用Except模块,该模块需要下载安装在perl目录下,可以上http://www.cpan.org/上下载对应的安装包;
1. 用root用户登录环境;
2. cd /usr/lib/perl5/
3. 上传包IO-Tty-1.10.tar.gz 和 Expect-1.21.tar.gz到perl5目录下;
4. 安装IO-Tty-1.10
 tar -zxvf IO-Tty-1.10.tar.gz
 cd IO-Tty-1.10/
 perl Makefile.PL
 make
 make test
 make install
5. 安装Expect-1.21
 tar -zxvf Expect-1.21.tar.gz
 cd Expect-1.21/
 perl Makefile.PL
 make
 make test
 make install

使用use Expect;
Demo:
    my $ssh = Expect->new;
    my $timeout = 10;
    $ssh->raw_pty => 1;
    $ssh->spawn("sftp $User\@$Server") or die "spawn failed!\n";
    $ssh->expect($timeout,[qr/continue connecting (yes\/no)?/,sub{$ssh->send("yes\n");exp_continue;}],
                          [qr/Password:/,sub{$ssh->send("$Password\n");exp_continue;}],
                          [qr/sftp>/,sub{$ssh->send("cd config\n");}]);
                         
    $ssh->expect($timeout,[qr/sftp>/,sub{$ssh->send("put $g_local_file $g_file\n");}]);
    $ssh->expect(86400,"sftp>") or die "not see sftp tip for exit!";
    $ssh->send("exit\n");
    $ssh->soft_close();

备注:

1. 第一次使用sftp的时候,没有记录对应ip,所以会有以下提示:

Connecting to 192.168.1.1...
The authenticity of host 192.168.1.1(192.168.1.1)' can't be established.
RSA key fingerprint is 86:39:3b:c9:4b:90:df:e9:39:1d:3c:fb:56:26:2f:28.
Are you sure you want to continue connecting (yes/no)?

所以在脚本中需要发送yes

2.exp_continue 匹配到就执行send中的命令,匹配不到就继续执行下面的命令;

如果不加exp_continue,顺序执行脚本命令;

Perl脚本学习经验(四)--Perl中sftp的使用的更多相关文章

  1. Perl脚本学习经验(三)--Perl中ftp的使用

    使用use Net::FTP;Demo:    my $Server = '192.168.1.1';    my $User = 'admin';    my $Password = 'admin' ...

  2. perl 简单学习,安装perl模块

    检查是否安装了某个perl模块 有多种方式 0.perldoc perlinstall 列出所有的模块及版本号 1. perl -M模块名 -e 1(模块名不加空格) 没有返回值则说明有此模块 2.p ...

  3. shell脚本学习(四)

    1.文件权限 1.1 用户有一个称为setuid(S)的特殊权限,它出现在执行权限(x)的位置,setuid权限允许用户以拥有者的权限来执行可执行文件,即使这个可执行文件是由 其他用户运行的. 具有s ...

  4. 从零学习Fluter(四):Flutter中ListView组件系列详展

    今天继续研究了一些Flutter,主要时关于ListVIew那一块的东西,有 SingleChildScrollViewListViewGridViewCustomScrollView 感觉Flutt ...

  5. 云平台项目--学习经验--回调函数中call和apply

    Js中可以通过call和apply来代替另一个对象调用一个方法,将一个函数对象上下文从初始上下文改变为thisObj指定的新对象.简而言之,改变函数执行的上下文,而call和apply的基本区别在于他 ...

  6. [置顶] perl脚本中defined,exists和delete关键字的用法和区别

    刚学习perl脚本的时候,喜欢频繁使用defined关键字判断一个hash中某个key是否存在,后来程序出了问题才去perl官方文档查看关于defined关键字的准确使用方法.因此,这里我把perl中 ...

  7. C#怎么在生成解决方案的过程中执行perl脚本(C#早期绑定)

    转载 怎么在生成解决方案的过程中执行perl脚本 早期绑定在编译期间识别并检查方法.属性.函数,并在应用程序执行之前执行其他优化.在这个绑定中,编译器已经知道它是什么类型的对象以及它拥有的方法或属性. ...

  8. Apache服务器中运行CGI程序的方法,文中以Perl脚本作为示例

    关于apache与CGI在这里就不解释了. 1.apache下面以2.0.63为例介绍运行CGI程序的配置.(http://www.nklsyy.com) 2.下载Windows下的Perl解释器Ac ...

  9. perl 脚本测试

      原文地址:  http://blog.csdn.net/johnny710vip/article/details/8905239   这是一篇关于perl脚本测试的总结性文章,其中提到了很多实用的 ...

随机推荐

  1. 20151225jquery学习笔记---编辑器插件

    编辑器(Editor),一般用于类似于 word 一样的文本编辑器,只不过是编辑为 HTML格式的.分类纯 JS 类型的,还有 jQuery 插件类型的.一. 编辑器简介我们使用的 jQuery 版本 ...

  2. flexpaper 开源轻量级的在浏览器上显示各种文档的组件

    FlexPaper是一个开源轻量级的在浏览器上显示各种文档的组件,被设计用来与PDF2SWF一起使用, 使在Flex中显示PDF成为可能,而这个过程并无需PDF软件环境的支持.它可以被当做Flex的库 ...

  3. swift-闭包和类的声明

    //闭包:类似Oc中的block 反向传值引起代码的回调 func hasClosureMathes(arr : [Int],value:Int,cb:(num:Int,value : Int)-&g ...

  4. mysql 根据某个字段将多条记录的某个字段拼接成一个字段

    未合并情况 SELECT a.id, b.name AS "role" FROM sys_user a INNER JOIN sys_user_role c ON a.id=c.u ...

  5. webstorm的默认project编码为系统编码GBK.

    使用新的IDE,而不会设置,会给你带来灾难. 如下为我是用webstorm时遇到的文件编码问题. 纳闷很久,终于发现是IDE的设置问题. 参考

  6. 这样写JS的方式对吗?

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. bc

    调试脚本报错bc: command not found 原因是因为这个linux环境里没有安装计算器工具bc 用 apt-get install bc 或者 yum -y install bc 安装后 ...

  8. SQL的经典操作——批量复制同行的其它列数据到其它列数据

    看图说话比较直观: 对比复制前后的数据表: 使用SQL语句:UPDATE OR ROLLBACK Content SET YINBIAO = YINBIAO2, GESHU = GESHU2 WHER ...

  9. [翻译][MVC 5 + EF 6] 1:创建数据模型

    原文:Getting Started with Entity Framework 6 Code First using MVC 5 1.新建MVC项目: 2.修改Views\Shared\_Layou ...

  10. docker中搭建jenkins环境

    想在docker中搭建一个jenkins环境.开始的时候我想在先pull centos,然后在里面自己搭建环境,搭建后的环境可以运行,但是不知道挂载哪的数据,这也是我不熟悉jenkins的原因. 同事 ...