使用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. 7-2 DBA顾问第一次上次操作考试

    SQLPLUS执行:     1--@?/rdbms/admin/awrrpt 生产snapshot, 一个时间点, 再执行下一个时间点.     2--   附件作业第一次执行步骤: 1) SQLP ...

  2. 静态库的pdb

    静态库也会有pdb,只不过,默认是以vc编译器作为名字,比如vs2003的lib的pdb是vc70.pdb,vs2008则是vc90.pdb

  3. (转)IOS学习笔记-2015-03-29 int、long、long long取值范围

    unsigned - - unsigned - - unsigned __int64的最大值: __int64的最小值:- unsigned __int64的最大值:  

  4. 在.NET 应用程序设计中如何选择Class, Abstract Class and Interface

    关键字: Type– 类型 Class - 类 Abstract - 抽象的 Interface - 接口 Member - 成员 Method - 方法 Property - 属性 预备知识:在阅读 ...

  5. MySQL的基本使用

    SQL     DDL:数据定义语言  CREATE DROP ALTER     DML:数据操作语言  SELECT INSERT UPDATE DELETE     DCL:数据控制语言  GR ...

  6. js 判断数组中是否存在

    /* 判断数组中是否存在 var somearray = ["mon", "tue", "wed", "thur"] s ...

  7. MarkDown教程

    MarkDown笔记 在线编辑器其他教程 [1.标题] 标题1 标题1=== 标题2 标题2--- 标题3 1 2 3 4 5 6 7 7 #1 ##2 ###3 ####4 #####5 ##### ...

  8. margin系列之内秀篇

    本系列摘自  飘零雾雨的博客 最Cool的利器 一样东西在不同的场景,不同的人手里,所能做的事会有很大不同.我深切的以为 margin 绝对是 CSS 中最有能力的利器之一,不知大家以为然否? 前面几 ...

  9. 商务通简单弹窗样式 V1.0

    代码为: document.writeln('<style>*{margin:0; padding:0;}</style>');//创建中间弹框    document.wri ...

  10. MySQL簇-cluster

    http://www.php100.com/manual/MySQL/ndbcluster.html 先做个标记吧.