学习模块的最快方法就是学习实例,下面介绍Perl的Net::OpenSSH模块的使用实例,详细的说明可以参考CPAN上的介绍。

本机通过key登陆远程服务器,所以要先安装openssh,关于使用ssh公私密钥可以参考man手册。

1、连接一台远程服务器并执行命令或者脚本

  1. #!/usr/bin/perl -w
  2. use strict;
  3. use Net::OpenSSH;
  4. my $hostname = 'puppet.ygfs.com';
  5. my $ssh = Net::OpenSSH->new( $hostname, user => 'root' );
  6. my $cmd = 'ls -l /';
  7. my $svn_cmd = 'bash /data/ygfs_ctrl/db_convert.sh';     #这里是在远程执行一个bash shell脚本
  8. open LOG,">> perl_exec.log";                            #记录执行日志
  9. select LOG;
  10. my @out = $ssh->capture( $cmd );
  11. print "@out";
  12. my @db_out = $ssh->capture( $svn_cmd );
  13. print "@db_out";
  14. close LOG;
  15. select STDIN;

2、连接多台远程服务器,并执行命令或者脚本

  1. #!/usr/bin/perl -w
  2. use strict;
  3. use Net::OpenSSH;
  4. my @hostname = qw(                              #建立一个服务器列表
  5. puppet1.ygfs.com
  6. puppet2.ygfs.com
  7. );
  8. my $cmd1 = 'ls -l';
  9. my $cmd2 = 'df -i';
  10. for my $host ( @hostname ) {
  11. my $ssh = Net::OpenSSH -> new( $host, timeout => 600 );
  12. my @out = $ssh -> capture( $cmd1 );
  13. my @space = $ssh -> capture( $cmd2 );
  14. print @out;
  15. print @space;
  16. }
  17. print "@hostname\n";

3、从参数列表读取要连接的远程服务器和要执行的命令

  1. #!/usr/bin/perl -w
  2. use strict;
  3. use Net::OpenSSH;
  4. my $hostname   = $ARGV[0] || 'puppet.ygfs.com';
  5. my $remote_cmd = $ARGV[1] || 'hostname && uname -p';
  6. my $ssh = Net::OpenSSH -> new( $hostname );
  7. my @exec_log = $ssh -> capture( $remote_cmd );
  8. print @exec_log;

4、使用管道

  1. #!/usr/bin/perl -w
  2. use strict;
  3. use Net::OpenSSH;
  4. my $hostname = $ARGV[0] || '127.0.0.1';
  5. my $ssh = Net::OpenSSH -> new( $hostname );
  6. my @lists = $ssh -> capture( 'ls' );
  7. print @lists;
  8. my @lists_format = $ssh -> capture2( 'ls -hl' );
  9. print @lists_format;
  10. #通过pipe_out方法获取远程主机上指定文件的内容,保存到$rout句柄,并打印输出,这里可以不使用pid变量
  11. my ( $rout,$pid ) = $ssh -> pipe_out( "cat install.log" )
  12. #my $rout = $ssh -> pipe_out( "cat install.log" )
  13. or die "pipe_out method failed:".$ssh -> error;
  14. while( <$rout> ) { print }
  15. close $rout;
  16. #写内容到远程服务器的指定文件
  17. my $rin = $ssh -> pipe_in( "cat >> nginx.conf" )
  18. or die "pipe_in method failed:".$ssh -> error;
  19. print $rin <<EOF;
  20. server{
  21. listen 8088;
  22. root /data/private_web;
  23. index index.html;
  24. server_name private.yuanfang.com;
  25. auto_index on;
  26. access_log /dev/null;
  27. error_log /dev/null;
  28. }
  29. EOF
  30. close $rin;

这里只是简单的介绍了Net::OpenSSH模块怎么使用,它还有很多方法和参数,读者可以参考手册。
   从上面的例子可以看到,这个模块不是并发连接到远程主机和执行命令的,所以对于要连接的对象很多的时候,耗时很长,效率很低,所以就有了Net::OpenSSH::Parallel模块,支持指定工作进程数和并发数量。下篇博文将会介绍。

Net::OpenSSH 模块使用实例相关推荐

  1. python argparse模块_Python argparse模块应用实例解析

    这篇文章主要介绍了Python argparse模块应用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 简介 argparse是python ...

  2. python导入json模块_Python调用json模块代码实例

    本篇文章小编给大家分享一下Python调用json模块代码实例,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. Json是JavaScript Object Notation ...

  3. python标准类型内建模块_Python内建模块struct实例详解

    本文研究的主要是Python内建模块struct的相关内容,具体如下. Python中变量的类型只有列表.元祖.字典.集合等高级抽象类型,并没有像c中定义了位.字节.整型等底层初级类型.因为Pytho ...

  4. python requests cookie_Python requests模块cookie实例解析

    cookie并不陌生,与session一样,能够让http请求前后保持状态.与session不同之处,在于cookie数据仅保存于客户端.requests也提供了相应到方法去处理cookie. 在py ...

  5. OpenCV非真实感渲染模块的实例(附完整代码)

    OpenCV非真实感渲染模块的实例 OpenCV非真实感渲染模块的实例 OpenCV非真实感渲染模块的实例 #include "opencv2/photo.hpp" #includ ...

  6. OpenCV:使用OpenCV无缝克隆模块的实例(附完整代码)

    使用OpenCV无缝克隆模块的实例 使用OpenCV无缝克隆模块的实例 使用OpenCV无缝克隆模块的实例 #include <signal.h> #include "openc ...

  7. OpenCV无缝克隆带GUI的模块的实例(附完整代码)

    OpenCV无缝克隆带GUI的模块的实例 OpenCV无缝克隆带GUI的模块的实例 OpenCV无缝克隆带GUI的模块的实例 #include "opencv2/photo.hpp" ...

  8. OpenCV无缝克隆不带GUI的模块的实例(附完整代码)

    OpenCV无缝克隆不带GUI的模块的实例 OpenCV无缝克隆不带GUI的模块的实例 OpenCV无缝克隆不带GUI的模块的实例 #include "opencv2/photo.hpp&q ...

  9. 多任务 schedule python_Python3.6 Schedule 模块定时任务 (实例讲解)

    Python3.6 Schedule 模块定时任务 (实例讲解) Python 是一种面向对象解释型计算机程序设计语言, 由 Guido van Rossum 于 1989 年底发明, 第一个公开发行 ...

最新文章

  1. 港科大谢丹阳教授问诊未来,预测长远趋势与转折点
  2. spring in action 4 线路图
  3. Java应用程序项目的打包与发行
  4. 杰奇程序 php文件设置,JIEQI CMS使用技巧
  5. ise 时钟约束_「新手入门」ISE工程升级到Vivado及板级信号调试技术
  6. 字节 字符 utf-8 unicode 以及提交表单验证字符长度 .......
  7. 版是什么_雕版研习 | 什么是版画?版是画的母亲,画是版的子女
  8. csdn上修改字体的颜色
  9. compose应用_带有PostgreSQLDocker Compose for Spring Boot应用程序
  10. 实用的it知识学习_怎样能更快更好的学习好书法?分享一些比较实用的理论知识...
  11. Windows phone 开发基础(14) WP8磁贴分两种的创建方式(内建和外建)
  12. 中文依存句法分析概述及应用
  13. sql语句ding_SQL语句映射文件增删改查、参数、缓存
  14. 【转载】快速掌握一个语言最常用的50%
  15. 验证码原理详解与案例
  16. 大学学习路线规划建议贴
  17. 10. python-es-8.3.3-IP范围聚合ip_range
  18. 广州互联网营销群聚会图片
  19. LiveData原理解析
  20. 多传感器融合定位十五-多传感器时空标定(综述)

热门文章

  1. KVM虚拟化下使用virsh shutdown命令无法关闭windows
  2. Java通过FFMPEG获取视频时长
  3. Hibernate的like用法
  4. [转]模拟芯片设计的四重境界
  5. WIN7下VS2005 VS2008 SQLSERVER2005安装顺序
  6. linux(Centos5.1)升级至2.6.19内核+L7实现-- 续限P2P软件
  7. 路由器访问控制列表详解
  8. Kubelet 对资源紧缺状况的应对
  9. create-react-app 自定义 eslint 配置
  10. 对接SAP人事档完成AD账号的自动授权