Unity3D で SSH してみる

20090612-1

Unity3D でSSH 出来たら夢広がりませんかね?

Unity3D というとゲームを作るのが主目的の人がほとんどかと思いますが、ツール開発でもかなり使えると思うのです。
特に、.Net で実装された便利なライブラリが流用できる点でもかなり利点があります。

以前、Unity4 で SSH に接続する SharpSSH の組み込みに挑戦してみましたが、かなり苦労しました。
なんとかサーバに接続するところまでいったところで力尽きたわけですが、Unity5 になって多分組み込みが楽になったんでは?(根拠なし)
というわけでやってみました。 2時間程で組み込みから動作確認までできたので記録に残しておきます。

SharpSSHを入手する

先ずは、 http://www.tamirgal.com/blog/page/SharpSSH.aspx へアクセスし、ソースをゲットします。

001

サイトにアクセスしたら下にスクロールさせ、

002

Download source code and examples: SharpSSH-1.1.1.13.src.zip の記述があるのでダウンロードリンクをクリックし、ソースをダウンロードします。

003

Unity5を起動し、プロジェクトを新規作成する

次に、Unity5 を起動し、新規プロジェクトを作成します。ここでは例として UniSSH で作成していますが、各自環境に合わせて適宜読み替えてください。

004

適宜入力したら、「Create Project」をクリックしてプロジェクトを作成します。

005

プロジェクトフォルダにSharpSSHのソースを展開する

ダウンロードしてきた SharpSSH の zip を展開します。ここではデフォルトの方法で展開してます。

006

「SharpSSH-1.1.1.src.zip」をダブルクリック

007

「ファイルを全て展開」をクリック

008

「展開」をクリック

009

展開完了

展開したフォルダから、下記ファイルを Unity プロジェクトの Assets\SharpSSH 以下にコピーする

まずは、Unity プロジェクトにフォルダを作成します。

010

Project ビューの「Create」→「Folder」をクリック

011

フォルダ名を「SharpSSH」と入力します。

012

フォルダ作成完了

013

作成した「SharpSSH」を右クリック→「Show in Explorer」をクリック

ファイルエクスプローラーでアセットフォルダが開きます。「SharpSSH」フォルダをダブルクリックし、中に入ります。

014

015

SharpSSH の展開したフォルダから、先ほど開いたフォルダに図の通りのファイル・フォルダをコピーします。

016

コピーするファイル

フォルダ java
フォルダ jsch
フォルダ lib
フォルダ Streams
ファイル ITransferProtocols.cs
ファイル SCP.cs
ファイル SecureShell.cs
ファイル Sftp.cs
ファイル SshBase.cs
ファイル SshExe.cs
ファイル SshHelper.cs
ファイル SshShell.cs
ファイル SshStream.cs
ファイル SshTransferException.cs
ファイル SshTransferProtcolBase.cs

不要ファイルをプロジェクトから削除する

上記コピーでコピーされた不要なフォルダを削除します。

017

削除フォルダ内訳

SharpSSH\      
  java\    
    CVS\  
    io\  
      CVS\
    lang\  
      CVS\
    net\  
      CVS\
    util\  
      CVS\
  jsch\    
    CVS\  
    examples\  
    jce\  
      CVS\
  lib\    
    CVS\  
  Streams\    
    CVS\  

VSTUアセットをインポート(Mono Develop派の方はスキップしてOKです)

ここからインポートされたスクリプトのエラーを回避するためにソースを少し編集します。でもその前に VSTU が欲しいので入れておきます。

018

「Assets」→「Import Package」→「Visual Studio 2013 Tools」をクリック

019

「Import」をクリック

SharpSSHのエラーをつぶしていく

エラーが2カ所あります。

020

Unity 下のエラーが表示されているステータスをクリックして、コンソールを表示させます。

021

エラーメッセージをダブルクリックし、ソースを開きます。

022

SharpSSH\Streams\ProtectedConsoleStream.cs を編集し、下記のとおり修正します。

023

024

修正が完了すると、エラーがとりあえず消え、ビルドが通ります。

とりあえず動かしてみる

シンプルなスクリプトを走らせてみます。

026

027

ヒエラルキービューを右クリック→「Create Empty」で GameObject を生成します。

028

プロジェクトビューを右クリック→「Create」→「C# Script」でスクリプトを作成。

029

ファイル名をここでは「SSHTest」とします。

030

SSHTest をダブルクリックし、下記のようにソースを入力します。

using UnityEngine;
using System.Collections;
using Tamir.SharpSsh;

public class SSHTest : MonoBehaviour {

    public SshExec sshexec;
    public bool boolConnected = false;

    void Start() {
        sshexec = new SshExec("???.???.???.???", "login id", "password");
        sshexec.Connect();
    }

    void Update() {
        if (sshexec != null && sshexec.Connected && !boolConnected) {
            string stSTD = "";
            string stERR = "";
            var iResult = sshexec.RunCommand("echo \"Hello SSH!\"", ref stSTD, ref stERR);
            Debug.Log("=== stdout ===");
            Debug.Log(stSTD);
            Debug.Log("=== stderr ===");
            Debug.Log(stERR);
            Debug.Log("=== code ===");
            Debug.Log("" + iResult);
            sshexec.Close();
            sshexec = null;
            boolConnected = true;
        }
    }
}

SSHExec の “???.???.???.???”、”login id”、”password” は Linux シェルへのログインアドレス、ID、パスワードとなります。ログインできる環境を各自用意して適宜設定して下さい。

031

プロジェクトビューの「SSHTest.cs」 をヒエラルキービューの「GameObject」にドロップし、準備完了です。

032

実行ボタンをクリックして実行します。

033

シェルでの実行結果が表示されます。もちろん ls とかも使えます。

20090711-1

ツイートツイート