- 締切済み
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] ****************************** 不明確な部分等ありましたらすみません。。。 どうかご教授お願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- t-okura
- ベストアンサー率75% (253/335)
起動したプロセスとの通信は、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; のようなコードで比較的簡単に実現できます。
お礼
詳細にありがとうございました。 まだ上記試してませんが、これから作成じっこうしてみたいと思います。 ありがとうございました。