• 締切済み

C#で仮想環境上(Linux)のスクリプト実行

Windowsアプリケーションから、VirtualBox(仮想化ソフト)上の Linuxのシェルスクリプトが実行されるようにしたいと考えているのですが、 どのような手法があるか、ご教授頂けますでしょうか。 イメージとしては、 Visual Studio上で実行ボタンをクリックすると、 Windows上で実行されるのと同様に、 Windowsアプリケーション上のボタンをクリックすると、 Linux上のシェルスクリプトが実行されるようにしたいと考えております。 仮想環境は起動していることが前提です。 また、開発環境は Visual C# (2010)です。 よろしくお願いいたします。

みんなの回答

  • jjk65536
  • ベストアンサー率59% (66/111)
回答No.1

UDPかTCPで通信してはいかがでしょう? Linux上で動作する簡単なデーモンをいっこ作って、(例えばUDP Port12345でListenするもの) 動作命令を受信したらシェルスクリプトを実行。 C言語であればsystem("/path/to/hoge.sh");とかですね。 1.Linuxでスクリプト起動指示待受デーモンを実行 2.C#からUDP Port12345で仮想PCのIPアドレスにスクリプト実行要求送出 3.Linuxでスクリプト実行要求受信 4.system()関数でシェルスクリプト実行 もちろんTCPでもいいしPort番号も別のものでOKです。 ほかには、LinuxでApache+PHPとか動かして、http://[virtualbox-ip]/start.phpにアクセスすると シェルスクリプトが動作するようにしておくとか。 この場合はC#からHTTPアクセスさせればOKですね。 スクリプト側では <? system('/path/to/hoge.sh'); ?> といった感じですね。 パケット使う以外の方法は思いつきいませんでした。 気に入らなかったらすんません。

KAZUYOSHI_SAITO
質問者

お礼

早速のご回答ありがとうございます! 自分なりに調査した結果、 下記のようにSharpSSHというライブラリを利用してLinuxコマンドを送信できることがわかりました。 ///////////////////// SshExec exec = new SshExec("192.168.0.1", "user", "pass"); exec.Connect(); string stdOut = null; string stdError = null; exec.RunCommand("test.sh", ref stdOut, ref stdError); Console.WriteLine(stdOut); exec.Close(); ///////////////////// しかし、TeraTermなどのターミナルからスクリプトを実行した際と、 SharpSSHを用いてスクリプトを実行した際において 設定されている環境変数が異なる(envコマンドで比較するとSharpSSH側が少ない)ようで、 正常に実行されませんでした。 事前にすべての環境変数をexportコマンドで設定することで回避はできましたが、 あまりいい方法では無い気がしますので ご教授頂いた方法も検討させて頂きたいと思います。

関連するQ&A