複数台のマシンを使う機会が増えてきていちいちセットアップするのも面倒になってきたので
楽をしたく、お勉強用の環境もクラウドIDEやオンラインストレージなどを利用することが多くなってきました。

勉強利用とはいえ、クラウドIDEのコンテナの中に秘密鍵を置くのは嫌だなーと思っていたところ、面白いソリューションを見つけたので試した結果の備忘録を残します。

秘密鍵をスマホに保管して管理
https://krypt.co/

秘密鍵をスマホに保管することでセキュリティを高めるというコンセプト。

スマホなくしたら接続できなるじゃんとか、色々と使わない理由はあげれますが勉強用の環境へのアクセスなので細かいことを気にしなくてもいいので速攻で導入。

インストール手順(デバイス)

今回は、CodeanywhereのUbuntu 14.04のBlankスタックにインストール

$ sudo apt-get update
$ curl https://krypt.co/kr | sh

これで終わり。楽チン。色々とインストールされるが細かいことは気にしない。

インストール手順(iPhone)

  1. App Storeから該当のアプリをインストール

終わり。こちらも楽チン。

設定手順

  1. アプリを立ち上げて GENERATE KEY PAIR を押下
  2. メールアドレスを登録
  3. QRコードスキャナを起動。
  4. 先ほどkrをインストールしたクライアントで kr pair というコマンド実行
  5. QRコードがターミナル上に表示されるのでスマホアプリでQRコードを読み込む
  6. QRコードを読み込むとアプリで piar するか聞かれるので pair を押下

これで終わり。楽チン。
注意点として登録時点ではpairするタイミングではデバイス名を変更できない。
デバイス名はマシンのホスト名となるのでコンテナのようなホスト名が同じになる環境で利用する場合は、デバイス登録後にアプリ上でデバイス名を変えておかないといけない。
(同名のデバイスを登録すると上書きされる??ぽい)

利用手順

$ kr me

で公開鍵が表示される。
他にも、

$ kr github
$ kr digitalocean
$ kr aws
  .
  .
  .

などがある。
どれも公開鍵を表示して、それぞれの環境への公開鍵にインポート方法も教えてくれる。

AWS EC2(Amazon Linux)に接続する場合は、あら感じめ公開鍵をインポートしておき、証明書を指定せずにsshするだけ。

$ ssh ec2-user@IPとか

そうするとターミナルに以下の文字が出る

Krypton ▶ Requesting SSH authentication from phone

スマホに通知が来るので接続の許可か拒否を行う。
許可は「一度だけ許可」、「同じホストへ3時間許可」、「全てのホストへ3時間許可」から選べる。
※アプリ側の設定を変えると「常に許可」状態にすることも可能みたいだが未検証。

許可するとターミナルに以下の文字が出る

Krypton ▶ Success. Request Allowed ✔

拒否した場合は、以下の文字がでる

Krypton ▶ Request Rejected ✘

仕組み

krをインストールすると、~/.ssh/configに以下の内容が追加される。

# Added by Krypton
Host *
        PKCS11Provider /usr/lib/kr-pkcs11.so
        ProxyCommand /usr/bin/krssh %h %p
        IdentityFile ~/.ssh/id_krypton
        IdentityFile ~/.ssh/id_ed25519
        IdentityFile ~/.ssh/id_rsa
        IdentityFile ~/.ssh/id_ecdsa
        IdentityFile ~/.ssh/id_dsa

ssh実行時にKryptonのプロキシを経由する設定に書き換わってる。
他のプロキシを通したい場合などは以下を参考にすれば良さそう。
https://krypt.co/docs/ssh/using-a-bastion-host.html

元のconfigは、 ~/.ssh/config.bak.kr という名前で残っていて、Kryptonで利用する公開鍵も ~/.ssh/id_krypton.pub という名前で置いてある。

アンイントールは少し手間が必要で自分で設定ファイルを戻さないと行けない
https://krypt.co/docs/start/installation.html

秘密鍵は、GENERATE KEY PAIR を実行した際に生成されたものが使い回される。
(pair毎に用意されているわけではない。)

同じスマホでpairしたデバイスで kr me で確認した公開鍵は同じものになっていた。
試していないけど、スマホ側で秘密鍵と公開鍵を削除できるようなので、これをすれば秘密鍵が作り直されそう。
(もちろん、pairした情報全部やり直しだろうけど。)

その他

  • 公開鍵はスマホアプリからメールとかSMSで送信ができる。
  • GitHubへのssh接続も同等にKryptonを通せる。
  • 利用しなくなったデバイスの設定はスマホアプリから削除すればおしまい。
  • デバイス側で新たにKryptonの設定をしなおしたい場合は、設定手順をやり直すだけ。 kr pair の時に新しく作り変えるか聞かれるので y と答えれば新しい設定を作り直してくれる。
  • AppleWatchに来る通知でも許可と拒否を選ぶことができる。
  • kr transfer というコマンドでバックアップができる?(未検証)

まとめ

  • 設定はすごく単純で難しいことは何もなく手軽に秘密鍵をセキュアに扱え、 サーバに設定を入れなくても良いのはとても助かる。
  • 秘密鍵の端末間の共有(同期)やバックアップを考える事が減る。(完全になくなるわけではない。)
  • Coreしか試していないが、PricingにあるCommandって方は「Two-Person Rule」っていう形で複数人が許可しなければ接続できないってのがある。

個人持ちの端末とお勉強用の環境へのアクセスにしか利用していないが、自分の判断で都度、接続の許可と拒否ができるのは安心感がある。
(お勉強環境を都度細かく監視したりはしないので)

Codeanywhereのスタック使ってsshする際はKryptonを利用してセキュリティを高めようと思います。

元記事はこちら

秘密鍵をスマホに保管して管理するKryptonを試してみた