DigitalOceanでKryptoniteを使用してSSHで安全に接続する方法

前書き

SSHは、リモートLinuxサーバーに接続する主な方法です。 このチャネルを保護することは、安全なインフラストラクチャを維持するために不可欠です。 SSHを介してリモートサーバーに対して認証を行う最も一般的な方法は、公開キーと秘密キーのペアを使用することです。 リモートサーバーの承認済みキーリストに公開キーを追加すると、準備が整います。

より難しい質問は、秘密鍵を安全に保管する方法です。

通常、開発者はプライベートキーを `〜/ .ssh +`ディレクトリに保存します。 ただし、単純な ` cat〜/ .ssh / id_rsa +`コマンドで秘密鍵を読み取ることができます。 マシン上のアプリケーションは、パスフレーズで暗号化されている場合でも、SSH秘密キーを読み取る可能性があります。

このセキュリティリスクの一般的な解決策は、2番目の要素を追加することです(つまり、 https://www.digitalocean.com/community/tutorials/how-to-set-up-multi-factor-authentication-for-ssh-on-ubuntu-16-04 [多要素認証、またはMFA]を有効にする) 。 これの欠点は、セットアップコストと使いやすさの2つです。 作成するサーバーごとに、OATH-TOTP PAMモジュールを使用して共有シークレットをロードするようにOpenSSHサーバーを構成する必要があります。 これは時間のかかるプロセスであり、間違いを犯す場所がたくさんあります。 さらに、サーバーにSSH接続するたびに、電話でアプリを開き、6桁のコードを読み取って、端末に入力する必要があります。 これにより、ワークフローが大幅に遅くなる可能性があります。

MFAの構成の欠点を回避するために、開発者はNitroKeyやYubiKeyなどのUSBハードウェアセキュリティモジュール(HSM)を使用して、SSHパブリックキーとプライベートキーのペアを生成および保存することがよくあります。 これらは、SSHキーペアを保持する小さなUSBデバイスです。 サーバーにSSH接続するたびに、USBデバイスをコンピューターに接続し、デバイスのボタンを押します。

ただし、HSMは高価です。 SSH互換デバイスの価格は最大50ドルです。 持ち運びできるもう1つのデバイスであり、サーバーにSSHで接続するたびに、USBデバイスをコンピューターに接続して、物理ボタンを押す必要があります。 通常、USB HSMにはディスプレイ画面がないため、実際にどのログインを承認しているかがわからず、認証されたものの監査ログを表示する方法もありません。

Kryptoniteは、SSH秘密鍵を保護するための新しいソリューションです。 無料で、セットアップが簡単で、ユーザーフレンドリーで、追加のセキュリティ保護が組み込まれています。 サーバー側での変更は必要なく、スマートフォンへのプッシュ通知を介して(アプリを開かずに)ログイン要求を承認できます。 既知のホストは、どのマシンまたはサーバーにSSHで接続しているかに関係なく、常に携帯電話であなたと一緒にいます。

このガイドでは、携帯電話でKryptoniteとSSHキーペアを生成し、携帯電話とローカルコンピューターをペアリングし、Kryptoniteを使用してDigitalOcean DropletにSSHで接続します。

前提条件

このガイドに従うには、次のものが必要です。

  • Linuxディストリビューションを実行している1つのDigitalOcean Droplet。

  • スマートフォン:iPhone(iOS 9.1以降)またはAndroid(6.0以降)。

  • macOS(10.10以降)、Ubuntu、Debian、RHEL、CentOS、Fedora、またはKali Linuxを実行しているパーソナルコンピューター。

ステップ1-クリプトナイトキーペアの生成

最初のステップは、iOSまたはAndroidスマートフォンでhttps://get.krypt.co [get.krypt.co]にアクセスしてKryptoniteアプリをダウンロードすることです。

アプリがインストールされたら、アプリを開いて* Generate Key Pair *をタップし、Kryptonite SSHキーペアを作成します。 公開鍵を識別するためにメールを入力します(またはこの手順をスキップします)。

次に、Kryptoniteのコマンドラインユーティリティをインストールする必要があります。

ステップ2-`+ kr +`のインストール

次の手順は、ローカルコンピューターで続行されます。 https://github.com/kryptco/kr [`+ kr `コマンドラインユーティリティ]をインストールする必要があります。これにより、Kryptoniteに保存されているキーでSSHを認証できます。 お好みのパッケージマネージャー( ` npm `や ` brew `など)で ` kr `をインストールするか、ここで行うように単に ` curl +`を使用します。

セキュリティ上の理由から、インストールする前にインストールスクリプトを調べたい場合は、 `+ curl https://krypt.co/kr>; install_kr +`を実行して見てください。 kr documentationで、その仕組みと別のインストール方法について詳しく読むことができます。

準備ができたら、「+ kr +」をインストールします。

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

プッシュ通知を有効にするよう求められます。 これは、Kryptoniteがプッシュ通知を介してログイン承認リクエストを送信するために必要です。

アプリケーション、キーペア、および「+ kr +」が用意できたので、次のステップはコンピューターとKryptoniteのペアリングです。

ステップ3-クリプトナイトとコンピューターのペアリング

`+ kr +`が正常にインストールされたら、次を実行します。

kr pair

端末にQRコードが表示されます。 端末ウィンドウが小さい場合は、QRコード全体が見えるように大きくするか、フォントサイズを小さくする必要があります。

Kryptoniteアプリで、画面の下部にある[カメラアクセスを許可]をタップします。 カメラが表示されたら、ターミナルでQRコードをスキャンします。 数秒後、Kryptoniteアプリは正常なペアリングを表示し、ターミナルはKryptonite SSH公開キーを印刷します。

このキーペアが機能することをテストしてみましょう。

ステップ4-Kryptoniteを使用したSSHのテスト

すべてが機能することを確認するには、パブリックの `+ me.krypt.co +`サーバーにSSHで接続してみてください:

ssh me.krypt.co

Kryptoniteアプリに、次の3つのオプションでSSH認証を承認するよう要求するリクエストが表示されます。

  • *一度だけ許可*は、この1つのリクエストのみを承認して `+ me.krypt.co +`にログインします。

  • * 1時間許可*このリクエストと、ペアリングされたコンピューターからの他のすべてのSSHログインリクエストを1時間以内に承認します。 これらのログインが発生しても通知されますが、自動的に承認されます。

  • *拒否*はこの要求を破棄し、コンピューターでSSHログインが失敗します(またはローカルキーにフォールバックします)。

*一度許可*をタップします。 `+ me.krypt.co +`へのSSHログインが成功すると、擬似シェルがすぐに終了し、シールドのロゴが表示されます。

デバイスをロックして再度SSHで `+ me.krypt.co +`に接続しようとすると、ロック画面からの承認を求めるプッシュ通知が目的のコマンドとともにデバイスに送信されます。

ステップ5-Kryptonite PubkeyをDigitalOceanに追加する

Kryptoniteがコンピューターとペアリングされたので、SSH経由で使用するすべてのサーバーとツールに公開キーをすばやく追加できます。

DigitalOceanに公開キーを追加するには、次のコマンドを実行します。

kr digitalocean

次のようなDigitalOceanに固有の手順を含む出力が表示されます。

OutputPublic key copied to clipboard.
Press ENTER to open your web browser to DigitalOcean.
Then click “Add SSH Key” and paste your public key.

次はこれを行う必要があります。

  1. ターミナルで「+ ENTER +」を押して、DigitalOcean設定ページに自動的に移動し、必要に応じてログインします。

  2. [* SSHキーの追加]をクリックします。

  3. Kryptonite公開キーを貼り付けます。

  4. [保存]をクリックします。

SSHキーを追加する詳細な手順は、https://www.digitalocean.com/community/tutorials/how-to-use-ssh-keys-with-digitalocean-droplets#step-three%E2%80%94copyで見つけることができます。 -the-ssh-keys [このDigitalOceanチュートリアルのSSHのステップ3]。

キーをDigitalOceanにアップロードすると、新しいドロップレットに簡単に追加できます。 サーバーを作成するときに、Kryptoniteキーのボックスを選択するだけです。 次に、このキーを既存のドロップレットに追加しましょう。

ステップ6-Kryptonite Pubkeyを既存のドロップレットに追加する

`+ kr +`コマンドラインツールを使用して、ローカルのSSHキーまたはパスワードでアクセスできる既に実行中のドロップレットにKryptonite公開キーを追加できます。

次のコマンドを実行して、Kryptonite公開キーをDropletの承認済みユーザーファイルに追加し、ユーザー名とDropletのIPアドレスを必ず置き換えます。

kr add @

これが完了したら、SSHを試行して動作することをテストします。

ssh @

スマートフォンでKryptonite SSHログインリクエストを受け取ります。

結論

Kryptoniteをセットアップし、Kryptonite公開キーをDigitalOceanアカウントに正常に追加したので、ペアリングしたコンピューターからDropletにSSHで接続できるようになりました。

秘密鍵は携帯電話に安全に保存され、デバイスから離れることはありません。 要求を許可すると、秘密鍵を使用して、デバイス上でローカルにSSHログインナンスに暗号的に署名します。 次に、この署名がコンピューターに返送され、SSH認証が完了します。

Kryptoniteの仕組みの詳細については、https://blog.krypt.co/the-kryptonite-architecture-a385e7aaa336 [Kryptoniteのシステムアーキテクチャブログの投稿]とhttp://github.com/kryptco[Kryptoniteおよび`+ kr +`ソースコード]。

Related