PerlからSSH

yum(DAGリポジトリ)でインストール

DAGのrepoを追加

rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

Net:SSHをインストール

yum --enablerepo=rpmforge install perl-Net-SSH-Perl

yumでインストールされないモジュールをインストール

perl -MCPAN -e shell
install Math::BigInt
install Math::BigInt::GMP

サンプルコード

#!/usr/bin/perl
use strict;
use Net::SSH::Perl;
use Net::SSH::Perl::Constants qw(:msg);

my $ssh = Net::SSH::Perl->new("HOSTNAME");
$ssh->login("USERNAME", "PASSWORD");
my ($stdout, $stderr, $exit) = $ssh->cmd('cat /etc/redhat-release');
print $stdout;
$ssh->cmd("exit");

しかし、この状態では2度目にコードを実行したらエラーとなるのです

ライブラリを修正して対応するとです

cd /usr/lib/perl5/site_perl/5.8.8/Net/SSH/
cp -p Perl.pm Perl.pm.ORG

237行目付近に

if ($! =~ /Address already in use/i) {

というコードがありますので以下の通り書換えます。

#if ($! =~ /Address already in use/i) {
if ($! =~ /(Address|The socket name is) already in use/i || $! =~ /アドレスは既に/) {

秘密鍵と公開鍵を使ってリモートのサーバーを操作する場合 サンプルコード

#!/usr/bin/perl
use strict;
use Net::SSH::Perl;
use Net::SSH::Perl::Constants qw(:msg);

my $ssh = Net::SSH::Perl->new("172.16.1.205",protocol=>'2,1' , identity_files => ['公開鍵']);
$ssh->login("USERNAME","");
my ($stdout, $stderr, $exit) = $ssh->cmd('ls /');
print $stdout;
print "ERROR:". $stderr ."\n";
print "EXIT CODE:". $exit."\n";
$ssh->cmd("exit");

さっくり実行してみると

Invalid key file type 'PEM': Base class package "Class::ErrorHandler" is empty.
    (Perhaps you need to 'use' the module which defines that package first.)
 at /usr/lib/perl5/vendor_perl/5.8.8/Convert/PEM.pm line 5
BEGIN failed--compilation aborted at /usr/lib/perl5/vendor_perl/5.8.8/Convert/PEM.pm line 5.
Compilation failed in require at /usr/lib/perl5/vendor_perl/5.8.8/Crypt/DSA/Key/PEM.pm line 5.
BEGIN failed--compilation aborted at /usr/lib/perl5/vendor_perl/5.8.8/Crypt/DSA/Key/PEM.pm line 5.
Compilation failed in require at (eval 55) line 1.
BEGIN failed--compilation aborted at (eval 55) line 1.
 at /usr/lib/perl5/vendor_perl/5.8.8/Net/SSH/Perl/Key/DSA.pm line 65

なんてエラーが出力した。

う~ん、鍵のタイプがPEMだぜ!そのタイプを使いたいなら”Class::ErrorHandler” をインストールしろやおりゃ!!

ってな事をおっしゃってるのだろうね

CPAN使ってインストールしてみる

perl -MCPAN -e shell
install Class::ErrorHandler

おっ、無事にインストール出来たみたい。

再度サンプルコードを実行したら、エラー無く実行できた(^^)

CPANからインストールする場合

yum -y install gcc gmp-devel gmp expat-devel
yes '' | cpan -i Math::BigInt::GMP
yes '' | cpan -i Net::SSH::Perl
yes '' | cpan -i Math::BigInt::Pari

なんとなく、これもインストールしてみたさ
yes '' | cpan -i Test::Pod
yes '' | cpan -i Test::Pod::Coverage

こっちの場合は余分なリポジトリをインストールする必要はないのだ

ライブラリを修正して対応するとです

cd /usr/lib/perl5/site_perl/5.8.8/Net/SSH/
cp -p Perl.pm Perl.pm.ORG

証明書の作成

これがなけりゃ意味ないよねwww

# ssh-keygen -t dsa -b 1024 -N ''
  パスフレーズ無しで作成してくれます
# cat /root/.ssh/id_dsa.pub >> /root/.ssh/authorized_keys
# chmod 600 /root/.ssh/authorized_keys

公開鍵は/root/.ssh/id_dsa
perl/ssh.txt · 最終更新: 2011/05/19 06:06 by miyako
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0