はじめに

こんにちは。KMC2回生のtyageです。

京都もほんとに寒くなってきて鍋が捗りますね。簡単だし美味しいあったまるし、最高ですね。

この記事はKMCアドベントカレンダー2013の17日目の記事で、 昨日は1回生のnona65537君によるSSH の二段階認証についてでした。

今日はGoogle ChromeというSSHクライアントの紹介なのですが、12日間続いたKMCアドベントカレンダーのサブプロジェクトであるSSHアドベントカレンダーもこれで最後になります。

最後がこれでいいのか?とも思うのですが、今までの内容がハードだったという方に向けて優しい内容となっておりますので、安心して御覧ください。

定番SSHクライアント「Google Chrome」

Google Chrome(もしくはChromium)と聞いて「あっ、SSHクライアントのことか!」と思われた方には少し物足りないかもしれないです。 ご了承下さい。

Google Chromeは少し特殊なクライアントで、SSHする方法が複数存在します。

1つはwebページから行う方法で、もう1つはChrome Extensionを使用する方法です。

webページから行う方法としてはGate Oneとかがあるようです。詳しくはwikipediaによくまとまっています。

最近はOpenRISKのJavaScriptエミュレータからSSHができるというのも見かけました。

webページから行う場合、SSHを実際に行うプロキシサーバーに対してWebSocketやXHRで通信することが一般的で、クライアント側でSSH接続をするわけではありません。 そのため「localhostに接続できない」「通信をする際に、通信先以外のサーバーを経由する必要がある」といった問題がでてきます。

しかし、クライアント側で通信を行うChrome Extensionを利用することでそのような問題を解決することができます。

Secure Shell

SSHクライアントのChrome Extensionはいくつかあるようですが、本家Chromiumで開発されている「Secure Shell」を使ってみましょう。

Secure Shell

実に殺風景な画面が見えると思います。

設定としてはユーザー名・ホスト名・ポート番号・Identity file・SSH Argumentsの他に、relay optionsというものがあります。

これは、HTTP経由のSSHリレーサーバーのオプションのようで、例えば「--config=google」とするとGoogleのSSHリレーサーバー(spdy-proxy.ext.google.com:8022)を経由できるということらしいのですが、あまり詳しくないので割愛します。

リレーサーバーを使用しない場合、SSH通信はCとC++で書かれたSSHのNaClラッパーを通じて行われます。

これらのコードはgitwebで管理されており、developer guideを参考にすれば、中身を書き換えてビルドすることができそうです。

試しにどこかのサーバーにSSH接続してみましょう。

秘密鍵を設定のIdentityに渡すことで鍵認証を行うことがでます。

これはHTML5のファイルシステムを利用しているので、Chrome同士で鍵を共有する機能を作ることもできると思うのですが、まだそこまでは出来てないように思います。(できたとしてもGoogle Driveに鍵を置くのは怖いですね。)

さて、うまく接続できたでしょうか?

同じ要領でlocalhostにも接続ができるため、Chromeをターミナル代わりに使うことも出来ます。

便利ですね!

Google Chromeでslが走ります

Google Chromeを使って自分だけのSSHクライアントを作ろう!

最後に、せっかくなので、Secure Shellを自分用に置き換えてみましょう。

Chrome ExtensionのディレクトリはWindows7だと「[ユーザーディレクトリ]\AppData\Local\Google\Chrome\User Data\Default\Extensions」、Macだと「[ユーザーディレクトリ]/Library/Application Support/Google/Chrome/Default/Extensions」にあるみたいです。 詳しくはここを参照

その中にある、Secure ShellのID(pnhechapfaindjhompbnflcldabbghjo)のディレクトリがSecure Shellのディレクトリになっています。 それを適当なところにコピーして編集していきましょう。

編集したら、「chrome://extensions/」に移動して「デベロッパーモード」を選択し、「パッケージ化されていない拡張機能を読み込む」でディレクトリごと選択すれば使うことができます。

このあたりはChrome Extensionの作成手順と同様です。

試しに、背景が10秒毎に切り替わるSSHクライアントを作成してみましょう。

このようなJavaScriptファイルを追加して、「html/nassh.html」で読み込み、仕上げに「manifest.json」のpermissionsに「https://gist.github.com/」を追加してやることでうまく動作すると思います。

うまく動作した図

これで日々のストレスの元である監視作業も癒しになりますね。

おわりに

今回は時間がなかったので、背景画像を変えるだけでしたが、通信内容を見て、何か行うということも可能です。

(nassh.CommandInstance.prototype.onPluginMessage_やnassh.CommandInstance.prototype.sendToPlugin_を書き換えるとよさそう)

手軽にできるので、自分だけのSSHクライアントを作ってみてはいかがでしょうか。

明日はcosさんでhttpsだそうです。