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にしか利用できないという点はあるのだが、それでもなかなかおもしろい感じ。 やはりブラウザからの操作なので手元のターミナルからの操作に比べるとやりにくいところは多々あるのだが、踏み台としては問題なさそうだ。