这两天为了实现远程登录折腾了两三天,先是查阅了实现方法,网上用Perl实现就有很多方法。

    1.使用Net::SSH::Perl

    2.使用Expect模块

    3.使用Net::SSH::Expect

    4.直接使用shell命令实现ssh -p port username@IP  $passwd

    这些方法中准备使用Perl的Net::SSH::Perl 模块来实现,因为网上代码有很多,而且可读性强,比如下面脚本

#!/usr/bin/perl
use strict;
use warnings;
use Net::SSH::Perl;

my $ssh = Net::SSH::Perl->new("192.168.4.217", port => 22);
print "login\n";
$ssh->login("root", "123qwe");
print "cmd\n";
my ($stdout, $stderr, $exit) = $ssh->cmd("ls -l /tmp");
print "$stdout\n";

    但是在安装时候遇到了一系列的问题,首先明确Net::SSH,Net::SSH2,Net::Telnet与Net::SSH::Perl 模块并没有关系,连依赖都没有,我试着安了两台机器,发现Net::SSH::Perl 模块需要如下的依赖包(使用instmodsh命令可以看到安装了哪些模块):

Crypt::DES
Crypt::DH
Crypt::DSA
DCOP
Digest::HMAC
Digest::SHA
Digest::SHA1
File::Which
Math::BigInt
Math::BigInt::GMP
Math::Pari
Net::SSH::Perl
Perl

我到cpan下搜索出这些包一个一个的安装(因为CentOS主机不能联网),当然我是先运行上面那个perl脚本,才一个一个发现需要的依赖的。这里面除了Math::Pari,其他模块都可以直接这样做。

1.tar zxvf 压缩包

2.cd 目录下

3.perl Makefile.PL

4.make

5.make install

(网上很多都说需要make test ,我没有test也能正常使用,但是第一次安装的时候,test有问题则安装失败)

只有Math::Pari这个包有问题,如果直接像上面那样做,安装提示有error,网上说是缺少Pari lib包(不是一样的,需要到Pari的网站去下载,不是CPAN),网站上最新的是pari-2.5.3,安装时1 ./Configure 2 make 3 make install,一开始安装有问题,但是还是安装成功了,但是这时安装Math::Pari 模块会提示你Version too new,网上有人说是新版本不支持,我有下载了2.3.0.安装后还是有点问题,后来又下载了pari-2.1.7,我看模块的Readme里面写的需要2.1.7的包,所以下了,鼓弄半天不怎么就安装上了,后来就觉得其实不用安装pari lib包,直接解压到Math-Pari 包里,他自己就去读他要的文件了,然后不用make test,直接make install,好像就可以,因为前几次就是卡在了make test里面。

这次的环境搭建让我知道了安装模块之间有很强的依赖,如果没有安装全,就会出现 Can't locate XXX/XXX.pm 这样类似的错误,安装之前最好读下包里面的README 或者 INSTALL文件,有能力之后可以读下他的Makefile,可以学到不少。

在不同版本的Perl下,可能需要的包不一定相同,在第一次安装的机器上是Perl 5.14 ,后来又在Perl 5.8.8里安装一遍,用到了一个Digest-SHA包,而不是Digest-SHA1包,可能是低版本发行时没有SHA1.

posted on 2013-03-20 15:02  征征的美丽心情  阅读(2438)  评论(0编辑  收藏  举报