2011年7月24日

Chrome OSでSSHトンネルを使用する方法

Google Chrome OSではSSHのサポートが組み込まれてるのですが、これを使用したトンネリングの使用方法をまとめてみます。

SSHサーバへの接続は比較的簡単に行うことができます。

方法は以下のとおり。

  1. Ctrl-Alt-Tを押し、croshを立ち上げ
  2. sshと入力
  3. SSHサーバの要件によって以下の情報を順番に入力します。

    • host [hostname]
    • user [username]
    • port [port number] (サーバのポートが通常と違ったものを使用している場合)
    • dynamic-forward [port number] (転送に使うポート番号、今回はポートを8800を使用しているものとみなします、この場合dynamic-forward 8800)
    • key [key file name] (公開鍵認証の場合)
    • nocmd (トンネルを使用する場合はシェルを立ち上げる必要がないのでこれを使用)

  4. connectを入力
  5. サーバのパスワード、もしくは秘密鍵のパスフレーズを入力)

これにより、SSHサーバに接続され、ポート8800にSOCKSポートが開きます。

現状の問題として、ChromeOSではSOCKS5をUIより設定する方法がありません。このため、少し特殊な方法で接続を設定する必要があります。(ChromeOSの設定では、SOCKS4のみが設定可能となります。この場合、DNSがローカル側で解決されるため、ローカル側の設定によりネームが他のホストに転送されたりブロックされてしまう可能性があります。)ChromeOSでは内部的にはSOCKS5がサポートされているので、これをプロクシ自動設定の仕組みを使用して設定します。
以下がこれを設定するプロクシ自動設定スクリプトです。



function FindProxyForURL(url, host)
{
   return "SOCKS5 localhost:8800;";
}



これをChromeOSシステムに転送します。(もしくは次からダウンロード可能です。ssh.pac。ファイル名は上書き等を防ぐため、他のファイル名の設定をお勧めします。)転送後、プロクシの自動設定スクリプトして file://home/chronos/user/Downloads/ssh.pacを指定します。 この後chrome://net-internals/#proxyを確認し、Effective SettingsがPACスクリプトがDIRECTではなく、PACファイル名になっていれば正常に設定されています。さらにIPアドレスががリモートのものになっていれば正常に設定されています。

SSH接続を常に使用する場合は別ですが、そうではない場合は直接接続を使用する場合は直接接続のオプションと切り替えて使う必要があります。しかし、これを指定するとPACスクリプトのファイル名が消えてしまうので、ファイルのフルパスを覚えておく必要があるため、直接接続を行うスクリプトと併用するとファイル名の書き換えで切り替えることができます。



function FindProxyForURL(url, host)
{
   return "DIRECT;";
}


(このファイルは次からダウンロード可能です -- direct.pac.)