• 締切済み

SSHをsystem関数で。

SSHログイン先のコマンド結果出力と、SSHログイン先のプロンプトを表示させたいです。 Perlでsystemを使用してSSHログイン先でコマンド実行した結果とプロンプト表示のみ 出力したいのですが、下記ではうまくいきません。。。 system( ssh -q 10.x.x.x ; ls);  *ここでsshはパスワードやユーザーを聞かれないように設定済み。 *"-q"はsshのオプションで、SSHログイン時の出力をしない設定 *ログイン先シェルはcsh (求める出力結果)************** [sshログイン先prompt] ls結果・・・ ls結果・・・ [sshログイン先pprompt] ****************************** 不明確な部分等ありましたらすみません。。。 どうかご教授お願いいたします。

みんなの回答

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.1

起動したプロセスとの通信は、system 関数ではできません。 起動したプロセスと入出力の双方向の通信をする方法は、perlipc の ドキュメント http://perldoc.jp/docs/perl/5.8.8/perlipc.pod に載っています(双方向通信で検索してください)。 もし CPAN の Net::SSH::Expect をインストールできるのでしたら、 #!/usr/bin/perl use strict; use warnings; use Net::SSH::Expect; my $ssh = Net::SSH::Expect->new( host => '10.x.x.x', raw_pty => 1, ); $ssh->run_ssh() or die; my $timeout = 3; my $ret = $ssh->read_all($timeout); print "$ret"; $ssh->exec('stty raw -echo'); foreach my $cmd ( 'date', 'ls', 'whoami' ) { print "$cmd\n"; my $ret = $ssh->exec($cmd); print $ret; } print "exit\n"; $ssh->close(); exit; のようなコードで比較的簡単に実現できます。

参考URL:
http://search.cpan.org/~bnegrao/Net-SSH-Expect-1.09/lib/Net/SSH/Expect.pod
yaya_you
質問者

お礼

詳細にありがとうございました。 まだ上記試してませんが、これから作成じっこうしてみたいと思います。 ありがとうございました。

関連するQ&A