cpan安装Net::SSH::Perl中遇到的一些问题

使用cpan安装Net::SSH::Perl:
cpan>install Net::SSH::Perl

期间遇到了一些问题,记录在此,以备后阅。

因为cpan对其它软件的依赖性,要求软件版本的不能过低,所以先升级一下这两个模块:

代码如下:

cpan>upgrade Module::Build
cpan>upgrade ExtUtils::Install

Math::BigInt报错:
Math::BigInt: couldn't load specified math lib(s), fallback to Math::BigInt::Calc at /usr/lib/perl5/site_perl/5.8.8/Crypt/DH.pm line 6

按照报错信息,把DH.PM这个文件的第六行做更改:
原为:use Math::BigInt lib => “GMP,Pari”;
更为:use Math::BigInt try => “GMP,Pari”;

在安装过程中,装到Math::GMP模块时,报错而停止。 大概意思是缺少GMP.c文件,故现在系统下安装一个GMP库文件,和一个GMP库的开发包。


代码如下:

aptitude install libmath-gmp-perl
aptitude search libgmp3-dev

如前面安装Math:GMP失败过,先把如下文件夹删掉后,再安装吧。
rm -fr /root/.cpan/build/Math-GMP-2.06-*

基本语法
1. 一般语法

代码如下:

my $host = "192.168.14.222";
        my $user = "root";
        my $passwd = "123456";
        my %params = (
        protocal => '2,1',
        debug => '1',
        );
        use Net::SSH::Perl;
        my $ssh = Net::SSH::Perl->new($host[,%params]);
        $ssh->login($user, $pass);
        my($out, $err, $exit) = $ssh->cmd($cmd);
        print "$out\n";

2. 根据提示信息,返回字符, 可实现交互式操作。

代码如下:

$ssh->register_handler("stdout",sub{
            my($channel,$buffer) = @_;
            my $str = $buffer->bytes;
            if($str =~ /(.*)\[Y\/n\/\?\]/i){
                  $channel->send_data("y\n")
               }}
        );

3. Term::ReadKey模块   得到一个互动的伪终端

代码如下:

use Term::ReadKey;
ReadMode('raw');
$ssh->shell;
ReadMode('restore');

解决连接远程主机慢的问题

网上说要安装三个东西:
YAML
Math::BigInt
Math::BigInt::GMP

之前已经安装完 YAML 和  Math::BigInt 了,在装完 Math::BigInt::GMP 后测试,在与远程主机的连接过程中,速度明显提升(连接到远程主机后操作时间不变)。

实例

实例1: 登录一台远程主机,完成简单操作。

代码如下:

use strict;
        use warnings;
        use Net::SSH::Perl;
        my $host = "192.168.14.222";
        my $user = "root";
        my $passwd = "123456";
        my %params = (
        protocal => '2,1',
        debug => '1',
        );
        my $ssh = Net::SSH::Perl->new($host,%params);
        $ssh->login($user,$passwd);
        my ($out,$err,$exit) = $ssh->cmd("ifconfig");
        print "$out\n";
        $ssh->cmd("mkdir /home/user;touch /home/user/{1..10}.log");

实例2:通过一个远程主机列表,登录N台远程主机,完成可提问式的互动操作。
远程主机列表文件Remoto_host_list.txt文件:
192.168.14.222 root 123456
192.168.14.223 root 123456

程序:

代码如下:

use strict;
        use warnings;
        use Net::SSH::Perl;
        open HOST_LIST, "Remote_host_list.txt" or die "can`t open this file\n";
        sub MySSH{
        my ($host,$user,$passwd) = split;
        my %params = (
        protocal => '2,1',
        # debug => '1',
        );
        my $ssh = Net::SSH::Perl->new($host,%params);
        $ssh->login($user,$passwd);
        $ssh->register_handler("stdout",sub{
            my($channel,$buffer) = @_;
            my $str = $buffer->bytes;
            if($str =~ /(.*)\[Y\/n\/\?\]/i){
                  $channel->send_data("y\n")
              }}
        );
        $ssh->cmd("aptitude install ppp");
        print "\n** $host complete...\n\n";
        };
        while(<HOST_LIST>){
        MySSH
        }

说明:
根据给出的远程主机列表文件,来逐一完成安装PPP的操作,在实际的安装过程中,会出现询问,是否安装一些依赖包,如安装按y,否则按n

情景如下:
Do you want to continue? [Y/n/?]
用"register_handler",可实现交互式的自动安装。

(0)

相关推荐

  • cpan安装Net::SSH::Perl中遇到的一些问题

    使用cpan安装Net::SSH::Perl:cpan>install Net::SSH::Perl 期间遇到了一些问题,记录在此,以备后阅. 因为cpan对其它软件的依赖性,要求软件版本的不能过低,所以先升级一下这两个模块: 复制代码 代码如下: cpan>upgrade Module::Buildcpan>upgrade ExtUtils::Install Math::BigInt报错:Math::BigInt: couldn't load specified math lib(s)

  • CloudStack 安装及使用过程中常见问题汇总

    CloudStack 安装及使用过程中常见问题汇总             在做工程项目中对CloudStack 安装及使用过程中常见的几个问题及如何解决做一个总结.   1.Windows XP虚拟机内部重启不能正确获取IP,windows xp iso建立VM,重启VM无法正确获取IP地址,原因是没有加入域,可以通过修改注册表来解决此问题.设置组策略 计算机配置--管理模板--网络--DNS客户端里的DNS后缀搜索列表,设置为已启动,后缀值为cs1group.internal Windows

  • Ubuntu18.04下安装配置SSH服务的方法步骤

    安装ssh工具 1.打开终端键入如下命令: apt-get update apt-get install openssh-server 2.选择Y继续执行: 启动SSH服务 1.键入如下命令: /etc/init.d/ssh start 注:重启命令与关闭命令如下: /etc/init.d/ssh restart #重启SSH服务 /etc/init.d/ssh stop #关闭SSH服务 2.查看进程,检查是否启动成功,键入如下命令: ps -e | grep sshd 有了进程才能进行SSH

  • Perl中的符号 ->;、=>; 和 :: 分别表示什么意思?

    What do the ->, => and :: symbols mean? The -> is the "infix dereference operator". In other words it is the means by which one calls a sub with a pass by reference (among other things you can do with ->). As stated above most things

  • Perl中的特殊符号介绍

    $_   俗称perl的老地方,当你的程序中未告知使用哪个参数或者变量时,perl就会自动使用$_中的值,比如 for(1..10){ print ; } 这里print没有指定参数,所以它就会使用$_,那$_里面是什么呢?每次循环$_的值都会变化,所以$_实际上就是1 .. 10这10个值,所以上面的代码打印的结果就是12345678910 $! 当且仅当某个函数调用失败时才会设置该变量,所以经常这样使用这个变量 open FILE,"<d:/code/zdd.txt" or

  • Perl中的单行注释和多行注释语法

    同其他大多数编程语言一样,Perl中的单行注释也是#开头,例如: 复制代码 代码如下: #print "Hello,World!"; 但多行注释,不同的语言有不同的注释方式,比如说: Java,C/C++: 复制代码 代码如下: /*  *注释若干行  *注释若干行  *注释若干行 */ Python: 复制代码 代码如下: """  用三个双引号,多行注释  用三个双引号,多行注释  用三个双引号,多行注释 """ '''

  • 讲Perl中的本地时间与UNIX时间戳间相互转换的方法

    当你的Perl脚本需要解决时间信息,这里有两种方法来表示和处理日期和时间.一种方法是易读的时间表示(例,"Sat Mar 14 10:14:05 EDT 2015"),另外一种是使用UNIX时间戳(也叫"新纪元时间"),这是从1970年1月1日到今所经过的时间秒数.每一种方法都有它自己的优劣势,取决于你的需要,也许也就需要转换一种格式到另一种. Perl中转换本地时间到UNIX时间戳 为了从日期字符串中获得UNIX时间,可以使用Date::Parse模块中str2t

  • Perl中的真与假深入研究

    Perl认为真值是自明的(self-evident), 表示任何事物的真值都可以计算.Perl以实用的方式来定义真值,即一个实体的真值取决于这个实体的类型.Perl总是乐观的认为:这个世界上真的东西远比假的东西多的多. Perl区别与任何其他计算机语言,Perl是语言学家创造的,而语言的意思离不开上下文语境,所以Perl中的真值都可以在标量(标量$与数组@类似于英文中的单数与复数, book 与 books的区别, 真值在现实世界中,应该就是单数,所以是标量)计算,除此之外,不会做任何类型的强制

  • Perl中的列表和数组学习笔记

    一.列表 列表是包含在括号里的一序列的值,可以为任何数值,也可为空,如:(1, 5.3 , "hello" , 2),空列表:(). 注:只含有一个数值的列表(如:(43.2) )与该数值本身(即:43.2 )是不同的,但它们可以互相转化或赋值.列表例: 复制代码 代码如下: (17, $var, "a string")     (17, 26 << 2)     (17, $var1 + $var2) ($value, "The answer

  • Perl中的文件读写学习笔记

    一.打开.关闭文件 语法为open (filevar, filename),其中filevar为文件句柄,或者说是程序中用来代表某文件的代号,filename为文件名,其路径可为相对路径,亦可为绝对路径. 复制代码 代码如下: open(FILE1,"file1");  open(FILE1, "/u/jqpublic/file1"); 打开文件时必须决定访问模式,在PERL中有三种访问模式:读.写和添加.后两种模式的区别在于写模式将原文件覆盖,原有内容丢失,形式为

随机推荐