私は、Perlでリモートマシンにsshするスクリプトを作成しようとしています。ssh perlスクリプトが実行されていません
私は何が間違っているのか分かりませんが、スクリプトを実行すると、パスワードを入力した後にrootパスワードと空白の出力が表示されます。ここで
は私のスクリプトです:
#!/usr/bin/perl
use strict;
use warnings;
my @id=`ssh expert\@x.x.x.x`;
print"@id";
私は、Perlでリモートマシンにsshするスクリプトを作成しようとしています。ssh perlスクリプトが実行されていません
私は何が間違っているのか分かりませんが、スクリプトを実行すると、パスワードを入力した後にrootパスワードと空白の出力が表示されます。ここで
は私のスクリプトです:
#!/usr/bin/perl
use strict;
use warnings;
my @id=`ssh expert\@x.x.x.x`;
print"@id";
私は理由の下のためのPerlコード内のシステムのsshコマンドを使用しないことをアドバイスします:
ではなく、CPANライブラリを使用してください。 PerlコードからSSHコマンドを起動するためのNet :: SSH :: Perl
以下に述べるように、このモジュールを使用してシェルを開くことがそのシンプル:
以下$ssh->shell
Opens up an interactive shell on the remote machine and connects it to your STDIN. This is most effective when used with a pseudo tty; otherwise you won't get a command line prompt, and it won't look much like a shell. For this reason--unless you've specifically declined one--a pty will be requested from the remote machine, even if you haven't set the use_pty argument to new (described above).
This is really only useful in an interactive program.
In addition, you'll probably want to set your terminal to raw input before calling this method. This lets Net::SSH::Perl process each character and send it off to the remote machine, as you type it.
To do so, use Term::ReadKey in your program:
use Term::ReadKey;
ReadMode('raw');
$ssh->shell;
ReadMode('restore');
は、コマンド出力を発射し、解析するために同じモジュールを使用することがいかに簡単かを示して簡単な例です:
ネット:: SSH :: PerlのCPANのドキュメントへuse Net::SSH::Perl;
my $ssh = Net::SSH::Perl->new($host);
$ssh->login($user, $pass);
my($stdout, $stderr, $exit) = $ssh->cmd($cmd);
リンク:http://search.cpan.org/~schwigon/Net-SSH-Perl-1.42/lib/Net/SSH/Perl.pm
私が使用することを好むもう一つのモジュールは、ネットで::のOpenSSH:http://search.cpan.org/~salva/Net-OpenSSH-0.70/lib/Net/OpenSSH.pm
use Net::OpenSSH;
my $ssh = Net::OpenSSH->new($host);
$ssh->error and
die "Couldn't establish SSH connection: ". $ssh->error;
$ssh->system("ls /tmp") or
die "remote command failed: " . $ssh->error;
my @ls = $ssh->capture("ls");
$ssh->error and
die "remote ls command failed: " . $ssh->error;
my ($out, $err) = $ssh->capture2("find /root");
$ssh->error and
die "remote find command failed: " . $ssh->error;
my ($rin, $pid) = $ssh->pipe_in("cat >/tmp/foo") or
die "pipe_in method failed: " . $ssh->error;
print $rin "hello\n";
close $rin;
これは、プログラムに依頼したものです。このライン
`ssh expert\@x.x.x.x`
あなたはおそらく一度、リモートシステムとやり取りする必要が与えられたパラメータサブプロセス
最初の方法ははるかに簡単な方法です。 Net::OpenSSH
モジュールを使用してドキュメントを読むと、オブジェクトを作成して接続を開くことができます。その後、コマンドを送信し、そのオブジェクトのcapture
メソッドを使用して出力を取得することができます
思考:なぜそれが話ですか*と* *の代わりに*を聞く*と話す*そして*から聞く?ああ私たちはあなたを愛して英語 – Borodin
シェルプロンプトで「ssh [email protected]」と入力するとどうなりますか? – Marty
あなたは 'ssh'ターゲットコマンドを与えていないので、シェルプロンプトが表示されます。だから、あなたが望むのは、シェルプロンプトで単にsshを使っている間に 'my @id = \' ssh expert @ ... date \ ';'(例えば) –
リモートにログインすることができるのです – Sravan