スマホアプリKryptoniteの鍵ペアでEc2にSSH接続してみた

2017.05.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

KryptCo社により提供されているKryptonite、 スマートフォンにインストールしたアプリで鍵ペアを生成、管理し、 SSHクライアントのローカルに秘密鍵を保存することなく、公開鍵認証によるSSH接続を実現できるサービスです。

今回、無償提供されている「Kryptonite Core」を利用し、スマートフォン上で管理された秘密鍵を利用して、 EC2のSSH接続を行う機会がありましたので、紹介させて頂きます。

Kryptonite Core

操作手順

モバイルアプリ

アプリのインストール

公式で配布されている、iOS用、Android用のアプリをインストールします。

今回、iOS版のアプリを利用しました。

鍵の生成

アプリを起動し、鍵ペアの作成を行います。

Kryptonite-ssh-01

Kryptonite-ssh-02

生成した鍵の所有者を示すメールアドレスを登録します。

登録したメールアドレス情報は、公開鍵ファイルの末尾に反映されます。

Kryptonite-ssh-03

SSH端末設定

  • 今回、MacOSX 付属のOpenSSHを利用しました。
sw_vers
ProductName:    Mac OS X
ProductVersion: 10.11.6
BuildVersion:   15G1421
ssh -V
OpenSSH_6.9p1, LibreSSL 2.1.8

「kr」インストール

OSXに、Kryptonite のインストールを実施します。

curl https://krypt.co/kr | sh

途中、パッケージの導入に伴う「sudo」の実行のため、パスワード入力が求められます。

Linux OS用として、fedora、centos、redhat、debian、arch、SuSE の設定が用意されています。

ペアリング

Kryptoniteのインストール後、「kr」コマンドを利用し、アプリと端末の紐付けを実施します。

kr pair

ターミナルに表示されたQRコード、アプリのカメラで認識させます。

Kryptonite-ssh-08

ペアリングに成功した端末は、モバイルアプリで「Paired Decices」として表示されます。

Kryptonite-ssh-09

SSH 公開鍵設定

ペアリング済みの端末で「kr me」コマンドを実行すると、作成した公開鍵を確認する事ができます。

$ kr me
ssh-rsa AAAAB3NzaC1yc2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
9ENrz5NgSwibiZiCQ== kryptonite@xxxxx.xxxxx

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Copy this key to your clipboard using "kr copy" or add it to a service like Github using "kr github". Type "kr" to see all available commands.

「kr copy aws」コマンドを利用すると、Ec2のキーペアとしてインポートできる公開鍵情報が クリップボードに保存されます。

$ kr copy aws
Public key copied to clipboard.

Kryptonite-ssh-10

SSH接続環境の用意

インポートしたキーペアを利用し、Ec2インスタンス(AmazonLinux)を起動します。

Kryptonite-ssh-11

起動済みのEc2インスタンスのSSH接続にKryptoniteを利用する場合、作成した公開鍵を「~/.ssh/authorized_keys」に追記します。

SSH接続先の登録

「kr add」コマンドを利用し、SSH接続先の登録を行います。

  • AmazonLinux (ec2-user) 接続例
kr add ec2-user@<接続先パブリックIP>

※パブリックIPは、EIP、FQDNなどの指定も可能です。

SSH接続

ssh ec2-user@<接続先パブリックIP>
  • SSHコマンドの実行後、スマートフォンアプリの承認待ち表示となります。

Kryptonite-ssh-06

  • スマートフォンアプリで承認を実施します

Kryptonite-ssh-12

  • 承認後、SSH接続が成功し操作可能となります。

Kryptonite-ssh-07-2

まとめ

Kryptonite の利用により、は、スマートフォン上に保存された秘密鍵を参照する事なく、公開鍵認証によるSSH接続を行う事が可能となりました。

Kryptonite、アプリで作成した公開鍵をSSH接続先(サーバ)に登録するだけで、 特別なサーバ設定を実施する事なく、仮想MFAを利用した二段階認証に匹敵する認証が実現できます。

秘密鍵を保存するスマートフォンの故障や、関係するサービスが停止した場合の備えは必要と思われますが、 秘密鍵の漏洩対策として簡単に利用できるKryptonite、ぜひいちどお試しください。