情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

プログラム一式をリモートサーバに転送して実行させるEclipseプラグイン「Remote Exec」を作りました

Eclipse (60) Eclipseプラグイン (3)

この前、Eclipseでリモート実行を自動化する方法を紹介しましたが、あまりに面倒なので、Eclipseプラグイン化しました。Eclipseの再生ボタンを押すと、実行に必要なファイル群を次々リモートサーバに送信し、リモートで実行して、手元のコンソールに結果を表示します。あまり試していない機能ですが、SSHトンネリングを経由して、リモートのJVMにアタッチするところまで自動実行することもできます。

ただ、自分でしか使っていないので、動作を期待しないでください。ソースは自分のGithubに置いてあります

remote-exec-plugin-debug-configurations

remote-exec-plugin-console

動作概要

Eclipseの再生ボタンでプラグインを起動すると、最初にリモートの起動用スクリプトを生成します。次に、SCPを使って、リモートのサーバに、実行に必要なファイルと起動用スクリプトを送信します。そして、SSH経由でリモート実行し、実行プログラムの出力を、手元のEclipseのコンソールウィンドウにリアルタイムに表示します。ここまでボタン一つです。

特徴

特徴は、コマンド入力などをすることなく、再生ボタンをクリックするだけで、送信や実行、結果の表示までができると言うことです。

また、SSH/SCPは外部コマンドを呼び出して実行します。Eclipseの内部にもSSH機能などがありますが、いろいろな場面で不具合が起こる今までの経験から、外部コマンドを呼び出すように設計しています。また、外部コマンド呼び出し時のパラメータを自由に変更でき、トラブル解決がしやすくしてあります。

Eclipseの「リモートデバッグ」機能とは違います。リモートデバッグの事前準備である、実行ファイル・ライブラリのリモートへの送信、起動コマンドの作成などを、自動実行します。コンソールでSSHログインしてコマンドを入力する必要もありません。

動作環境

  • ローカル(クライアント):Windows・Mac(・Linux)
  • リモートサーバ:Linux
  • リモートにはjavaコマンドがインストール済み、パスが通っている
  • ローカルからリモートにSSHログイン可能
    • Windowsの場合は、ssh・scpコマンドの互換コマンドが必要
  • Eclipse 4.2 で作成しています。

インストール方法

インストールにはdropin機能を使います。

上記の.jarファイルのいずれかをダウンロードして、eclipseフォルダにある「dropins>plugins」フォルダにコピーして、eclipseを再起動してください。これでインストール完了です。

使用方法

以下、使い方です。WindowsとMacの場合を紹介します。

ローカルのSSHコマンドの準備

ローカルのSSH・SCPコマンド(の互換コマンド)で、リモートサーバにログインできる状態にしておきます(Eclipseの中でSSH環境を作るのほんとトラブル多すぎる)

また、公開鍵認証が推奨で、パスワードのログインは非推奨です(パスワード入力に対応させるためにインタラクティブなConsoleを自作するのに苦労したけど非推奨)。

Windows編

Windows環境の場合は、PuTTYに同梱されているsshコマンドの互換プログラムplink.exeとscpコマンドの互換プログラムpscp.exeの利用がおすすめです。

まず、公開鍵認証をスムーズに行うために、PuTTYに同梱されているpageant.exeを起動して、タスクトレイのアイコンをダブルクリックして、「鍵の追加」から、秘密鍵(.ppk)と、秘密鍵のパスフレーズを入力しておいてください。

これにより、eclipse上でパスフレーズを入力したり、プロジェクトに秘密鍵を保存したりする必要がなくなります。

Mac編

sshコマンドで、公開鍵(~/.ssh/id_rsa)を設置し、公開鍵認証で接続できることを確認してください(例:ssh [-p ポート番号] username@remote.example.net)。

Macに「SSHキー"id_rsa"のパスワードを入力してください。」と尋ねられた場合は、「パスワードをキーチェーンに保存」をしておくと、何かとスムーズです。

Debug Configurationで設定する

このプラグインは、Debug(Run) Configurationで、実行設定を作成することで設定できます。つまり、たくさん設定を作れば、たくさんのサーバで気軽に実行できるようになります。

そこで、「Run>Debug Configurations」を開きます。

そして、左の一覧にある「Remote Exec」をダブルクリックして、新しい設定を作ります。

Mainタブ

まず、Mainタブで実行したい「プロジェクト」と、main関数のあるクラス「Main class」を設定します。

Remote Execution>Remote Host

次に、Remote Executionタブで詳細な設定を行います。

まず、リモートサーバにログインするための「ユーザ名(Login User Name)」「ホスト名(Host Name or IP Address)」「ポート番号(SSH Port)」を設定してください。SSHのデフォルトのポート番号は22です。

次に、実行に必要なファイルを、リモートサーバのどのディレクトリに展開するのかを指定します(Working Directory)。基本的にフルパス推奨です。

Remote Execution>Path to External SSH Command Line Tools

続いて、実行に使う「SSH」プログラムと「SCP」プログラムを指定します。

Macの場合は簡単で、それぞれ「ssh」と「scp」と入力するだけです。

Windowsの場合は、PuTTYに同梱されているplink.exeとpscp.exeまでのフルパスを入力してください(例:D:\putty\plink.exeとD:\putty\pscp.exe)。

Parameter Template

最後に、外部コマンドに与えるパラメータの形式を設定します。MacやLinuxで通常のsshとscpを使う場合は、「ssh, scp style」を選択してください。

WindowsでPuTTYを使う人は、「plink, pscp style」を選択してください。

そのほかの互換ソフトウェアを使う人は、Win/Macの場合を参考に、「original parameter style」から、適切なパラメータの形式を選択してください。

また、公開鍵ファイルを直接指定したい場合も、ここでパラメータをいじることで可能です。ただし、できればWin+puttyならpageant.exe、Macならキーチェーンもしくは事前に一度認証しておくことをおすすめします(Consoleからパスワードを入力することも不可能ではないはず)。

実行

実行は簡単で、実行ボタンをクリックするだけです。

順番に転送が行われ、完了し次第実行されます。そして、実行されたコマンドや実行結果はすべてコンソールに表示されます。

ベータ感のあるところ

ただし、いろいろな問題があるので、利用には注意してください。

改善したい・放置したい・どうにもならない問題

  • コマンド実行を途中で停止する機能はまだ搭載されていません
  • 設定画面が重いです
  • 基本的にWindows上で開発しています
  • Remote Executionタブ以外のタブの設定については、反映されない・利用されないものが多数含まれます
  • 今のところJava専用です
  • Mavenプロジェクトでも、ちゃんとDependenciesをEclipseが認識しているMavenプロジェクトであれば、動作を確認していますが、特殊なプロジェクトではどうなるかわかりません
  • 実行に必要なファイルが膨大であれば、その分転送に時間がかかります。
  • 文字コードがUTF-8固定になっています

変更履歴

  • 2013-12-20 : classpath上のファイルのうち、選択したファイルのみを転送できる機能を追加
  • 2013-12-20 : リモート側で実行する起動用シェルスクリプトのテンプレートを編集できる機能を追加

感想

はじめてEclipseプラグインを作ってみたのですが、楽しいですね。情報が少ないので、ソースコードを読んで情報を集めてばかりになりますが。

コメント(0)

新しいコメントを投稿