この文書の現在のバージョンと選択したバージョンの差分を表示します。
perl:ssh [2010/09/29 09:57] miyako |
perl:ssh [2011/05/19 06:06] (現在) miyako |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
====== PerlからSSH ====== | ====== PerlからSSH ====== | ||
+ | ===== yum(DAGリポジトリ)でインストール ===== | ||
+ | |||
DAGのrepoを追加 | DAGのrepoを追加 | ||
ライン 37: | ライン 39: | ||
ライブラリを修正して対応するとです | ライブラリを修正して対応するとです | ||
<code> | <code> | ||
- | cd /usr/lib/perl5/vendor_perl/5.8.8/Net/SSH/ | + | cd /usr/lib/perl5/site_perl/5.8.8/Net/SSH/ |
cp -p Perl.pm Perl.pm.ORG | cp -p Perl.pm Perl.pm.ORG | ||
</code> | </code> | ||
ライン 52: | ライン 54: | ||
if ($! =~ /(Address|The socket name is) already in use/i || $! =~ /アドレスは既に/) { | if ($! =~ /(Address|The socket name is) already in use/i || $! =~ /アドレスは既に/) { | ||
</code> | </code> | ||
+ | |||
+ | 秘密鍵と公開鍵を使ってリモートのサーバーを操作する場合 | ||
+ | サンプルコード | ||
+ | <code> | ||
+ | #!/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"); | ||
+ | </code> | ||
+ | |||
+ | さっくり実行してみると | ||
+ | <code> | ||
+ | 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 | ||
+ | </code> | ||
+ | なんてエラーが出力した。 | ||
+ | |||
+ | う~ん、鍵のタイプがPEMだぜ!そのタイプを使いたいなら"Class::ErrorHandler" をインストールしろやおりゃ!! | ||
+ | |||
+ | ってな事をおっしゃってるのだろうね | ||
+ | |||
+ | |||
+ | CPAN使ってインストールしてみる | ||
+ | <code> | ||
+ | perl -MCPAN -e shell | ||
+ | install Class::ErrorHandler | ||
+ | </code> | ||
+ | おっ、無事にインストール出来たみたい。 | ||
+ | |||
+ | 再度サンプルコードを実行したら、エラー無く実行できた(^^) | ||
+ | |||
+ | ===== CPANからインストールする場合 ===== | ||
+ | |||
+ | <code> | ||
+ | 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 | ||
+ | </code> | ||
+ | こっちの場合は余分なリポジトリをインストールする必要はないのだ | ||
+ | |||
+ | |||
+ | ライブラリを修正して対応するとです | ||
+ | <code> | ||
+ | cd /usr/lib/perl5/site_perl/5.8.8/Net/SSH/ | ||
+ | cp -p Perl.pm Perl.pm.ORG | ||
+ | </code> | ||
+ | |||
+ | ===== 証明書の作成 ===== | ||
+ | これがなけりゃ意味ないよねwww | ||
+ | |||
+ | <code> | ||
+ | # 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 | ||
+ | </code> | ||
+ | |||
+ |