CentOS 7でWEBブラウザからssh接続できる踏み台サーバ『KeyBox』を使ってみる

sshの踏み台サーバについて調べていたところ、ブラウザ経由でssh接続が行える『KeyBox』というツールを見かけたので、ちょっと試してみることにする。 触ってみた感じ、接続の種類や機能はApache Guacamoleに比べて少ないのだが、Guacamoleはコンソールに表示される文字列を直接コピペできないのに対し、KeyBoxは行えるので、用途によってはありかなと思う。 設定次第でLDAP認証も行え、二要素認証がデフォルトで設定可能なのも良い感じだ。 ちょっと前にlsshを使って似たようなことをやらせてみたけど、あちらではsshで繋げないといけないし、こちらはWebだけで完結するのは良さげだ。

1. KeyBoxを動作させる

KeyBoxはJavaで書かれているので、まず以下のコマンドでOracle JDK 1.8をインストールしてやる。

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u101-b13/jdk-8u101-linux-x64.rpm
rpm -ihv jdk-8u101-linux-x64.rpm

JDKのインストール後、以下のコマンドでKeyBoxのソースファイルをダウンロードしてくる。 (ダウンロードしてくるバージョンが決め打ちになっているので、ちゃんと最新のバージョンをこちらで確認することを推奨)

wget https://github.com/skavanagh/KeyBox/releases/download/v2.89.00/keybox-jetty-v2.89_00.tar.gz
tar xzvf keybox-jetty-v2.89_00.tar.gz

展開完了後、以下のコマンドでKeyBoxの起動をする。

cd KeyBox-jetty
./startKeyBox.sh
[root@BS-PUB-CENT7-01 KeyBox-jetty]# ./startKeyBox.sh
2017-04-08 18:51:34.535:INFO::main: Logging initialized @1213ms to org.eclipse.jetty.util.log.StdErrLog
2017-04-08 18:51:35.090:INFO:oejs.Server:main: jetty-9.4.2.v20170220
2017-04-08 18:51:35.161:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///root/KeyBox-jetty/jetty/webapps/] at interval 1
2017-04-08 18:51:38.670:INFO:oeja.AnnotationConfiguration:main: Scanning elapsed time=3005ms
2017-04-08 18:51:39.405:INFO:oejs.session:main: DefaultSessionIdManager workerName=node0
2017-04-08 18:51:39.405:INFO:oejs.session:main: No SessionScavenger set, using defaults
2017-04-08 18:51:39.406:INFO:oejs.session:main: Scavenging every 660000ms
Please enter database password:
Please confirm database password:
Setting KeyBox SSH public/private key pair
Finger print: c8:69:89:76:89:b8:51:c0:c5:d3:d0:7b:7d:cb:34:d1
KeyBox Generated Global Public Key:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCm/hYrUS/jyjNm9ItPNwW1lnfgSuTw0vW7M2hduDbKCozgTIxKLdRE+stbuywhzZhu2poXJIuXcBFWxAaA78WT2y4nFFDNm/NCeeWEksatc8CK1y1MHmhlkc1vk69su4NIlNpY/hlGKH6Xmri/0hl6pIwGcT6QDL0a8CHAIDbbTTbGfDvla3onXys2z+UjNVH9yktRJg2VWO9dIAHHIG3i+WtjEDgg1ljxtCbYNJPZ1ij3EqBw0C82SV7TYKfoJzDUZjJwzWZrM4fOIdA+TXx2rmoE3/twTEhMZkpysgtEuYibdvbkoHbSTExBz6rqunFGm8QPoyOOiOidpTsqJ3qj keybox@global_key

2017-04-08 18:52:09.499:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@a67c67e{/,file:///root/KeyBox-jetty/jetty/keybox/,AVAILABLE}{/root/KeyBox-jetty/jetty/keybox}
2017-04-08 18:52:09.524:INFO:oejus.SslContextFactory:main: x509=X509@5dbf5634(jetty,h=[],w=[]) for SslContextFactory@1948ea69(file:///root/KeyBox-jetty/jetty/etc/keystore,file:///root/KeyBox-jetty/jetty/etc/keystore)
2017-04-08 18:52:09.560:INFO:oejs.AbstractConnector:main: Started ServerConnector@3015db78{SSL,[ssl, http/1.1]}{0.0.0.0:8443}
2017-04-08 18:52:09.561:INFO:oejs.Server:main: Started @36240ms

これで、KeyBoxのサービスが起動した。

2. ブラウザからアクセスする

サービスが起動したので、ブラウザからアクセスしてみよう。 「https://IPアドレスorホスト名:8443/」にアクセスすると、以下のような画面が表示される。 ログインは初期設定されているID/PWである「admin/changeme」でログインできる。 ログイン後、ワンタイムパスワードの設定用QRコードが出てくるが、今回は割愛。

ログイン後の画面はこんな感じ。

3. sshでログインしてみる

さて、それでは実際にKeyBoxから別のサーバにssh接続してみよう。 まず最初に、(パスワード認証も可能だが)ssh接続で使用する鍵ファイルを作成しよう。 [Manage] > [Manage SSH Keys]を選択し、鍵ファイルを新規で作成する。 この時、鍵ファイルが流出してもすぐには使えないよう、パスフレーズの設定が必須になっている。

秘密鍵ファイルを作成したら、自動的にダウンロードされるので適切な場所に保存しておくか、要らなければ削除してしまうといいだろう。 公開鍵はログイン対象となるサーバを追加時に自動的に配置されるので、今の時点ではダウンロードできなくても問題ではない。 (このため、KeyBoxが稼働しているサーバからは、システム追加時にパスワード認証ができないと駄目かも)

次にシステムを追加する。上部メニューから[Manage] > [Systems]を選択し、[Add System]から新規で接続先となるサーバの情報を記述、追加する。 追加時に公開鍵配置のためにsshのログインパスワードを求められるので、入力して接続させる。

ログイン先のシステムを追加したら、実際にssh接続してみよう。 上部メニューから[Secure Shell] > [Composite SSH Terminals]を選択してやる。

接続先のホストを選択し、[Create SSH Terminals]をクリックする。

接続後の画面はこんな感じ。 ターミナルウィンドウのサイズは可変なので、ある程度自由に大きさを変えられる。

同様のシステムであるApache Guacamoleと比べるとsshにしか利用できないという点はあるのだが、それでもなかなかおもしろい感じ。 やはりブラウザからの操作なので手元のターミナルからの操作に比べるとやりにくいところは多々あるのだが、踏み台としては問題なさそうだ。