この文書の現在のバージョンと選択したバージョンの差分を表示します。
|
perl:ssh [2010/09/29 09:30] miyako |
perl:ssh [2011/05/19 06:06] (現在) miyako |
||
|---|---|---|---|
| ライン 1: | ライン 1: | ||
| ====== PerlからSSH ====== | ====== PerlからSSH ====== | ||
| + | ===== yum(DAGリポジトリ)でインストール ===== | ||
| - | DAGのrepoを追加 | ||
| + | DAGのrepoを追加 | ||
| + | <code> | ||
| rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm | rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm | ||
| + | </code> | ||
| - | Net:SSHを追加 | + | Net:SSHをインストール |
| <code> | <code> | ||
| yum --enablerepo=rpmforge install perl-Net-SSH-Perl | yum --enablerepo=rpmforge install perl-Net-SSH-Perl | ||
| ライン 11: | ライン 14: | ||
| - | yumでインストールされないモジュールを追加 | + | yumでインストールされないモジュールをインストール |
| <code> | <code> | ||
| perl -MCPAN -e shell | perl -MCPAN -e shell | ||
| install Math::BigInt | install Math::BigInt | ||
| - | |||
| install Math::BigInt::GMP | install Math::BigInt::GMP | ||
| </code> | </code> | ||
| ライン 26: | ライン 28: | ||
| use Net::SSH::Perl::Constants qw(:msg); | use Net::SSH::Perl::Constants qw(:msg); | ||
| - | my $ssh = Net::SSH::Perl->new("172.16.1.207"); | + | my $ssh = Net::SSH::Perl->new("HOSTNAME"); |
| - | $ssh->login("renbird", "dribner"); | + | $ssh->login("USERNAME", "PASSWORD"); |
| my ($stdout, $stderr, $exit) = $ssh->cmd('cat /etc/redhat-release'); | my ($stdout, $stderr, $exit) = $ssh->cmd('cat /etc/redhat-release'); | ||
| print $stdout; | print $stdout; | ||
| ライン 35: | ライン 37: | ||
| しかし、この状態では2度目にコードを実行したらエラーとなるのです | しかし、この状態では2度目にコードを実行したらエラーとなるのです | ||
| - | ライブラリを修正して対応せう | + | ライブラリを修正して対応するとです |
| <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> | ||
| + | |||
| + | |||