背景 - なぜ SSH キーを使用し、それを暗号化する必要があるのか?#
まず、3 つの理由を挙げますが、読みたくない場合は操作手順に直接移動することもできます(2 分もかからないで操作できます)。
第 1 のポイント - パスワードではなく SSH キーを使用するべきです#
日常の作業では、git
、rsync
、ssh
などのツールと頻繁にやり取りしますが、従来のパスワード認証方式は面倒で攻撃を受けやすくなります。以下の問題が発生する可能性があります:
- 盗聴のリスク:従来のパスワード入力方法は盗聴者に観察される可能性があり、セキュリティ上の問題を引き起こす可能性があります。一方、SSH キーを使用するとパスワードを入力する必要がなく、盗聴のリスクが大幅に減少します。
- パスワード管理の複雑さ:複数のリモートサーバーで異なるパスワードを使用すると、パスワードの混乱や忘れが生じる可能性があります。一方、SSH キーを使用すると、数個のキーペアの管理だけで済み、パスワード管理の複雑さが大幅に簡素化されます。
- リモートサーバーのセキュリティ:パスワードを使用してリモートサーバーにログインすると、悪意のある攻撃者に容易に攻撃されるリスクがあります。一方、SSH キーの使用により、攻撃者が身元を偽装してアクセスすることがより困難になり、リモートサーバーのセキュリティが向上します。
第 2 のポイント - いかなる場合でも SSH プライベートキーを暗号化する#
SSH キーを使用していても、プライベートキーの保護には注意が必要です。SSH プライベートキーを暗号化しないで便利さに走ってはいけません〜〜(多くの人がそうしているのではないでしょうか?)
- プライベートキーは認証の中心です:それはシステムとデータのメインの鍵です。プライベートキーが公開されると、悪意のある者があなたの身元を偽装してシステムにアクセスし、機密情報を盗み、許可されていない操作を行う可能性があります。
- プライベートキーは安全でない環境に存在する可能性があります:ローカルコンピュータ、モバイルデバイス、ネットワーク経由など、これらの環境は安全ではありません。プライベートキーを暗号化することで、権限のないアクセス時にもデータとシステムが直ちに公開されることはありません。
- デバイスが盗まれた、紛失した、または他の人にアクセスされた場合:暗号化されたプライベートキーは追加のセキュリティレイヤーを提供します。悪意のある者がプライベートキーファイルを入手できたとしても、その暗号化状態により直接使用することは阻止されます。
- マルウェアやウイルス:マルウェアは暗号化されていないプライベートキーファイルを検索するためにシステムをスキャンする可能性があります。例えば、コンピュータにはいくつかの違法コピーのソフトウェアがあるかもしれませんね?プライベートキーが暗号化されている場合、それらは簡単に機密情報を取得することができず、攻撃のリスクが減少します。
時々、誰かが便利さのために平文のプライベートキーを QQ などで別のコンピュータに転送することもありますが、これは非常に危険な行為です。それは平文のプライベートキーです〜〜
第 3 のポイント - SSH-Agent を使用してパスワード入力回数を減らす#
単に暗号化されたプライベートキーを使用するだけでは、パスワード入力の問題を本当に解決することはできません。それは単にすべてのパスワードを同じパスワードに変換するだけです。また、git pull
のたびにプライベートキーのパスワードを入力するわけにはいきません。したがって、頻繁なパスワード入力の手間やパスワードの漏洩のリスクを解決するために、SSH-Agent を導入します。
SSH-Agent は、復号されたプライベートキーを一時的に保存し、ユーザーはセッションの開始時に一度だけパスワードを入力する必要があります。その後の接続では、復号されたプライベートキーが自動的に使用されます。これにより、パスワード入力の回数が大幅に減少し、パスワードが盗聴またはキャプチャされる可能性が回避されます。また、複数のリモートサーバーと頻繁にやり取りする必要があるユーザーにとって、SSH-Agent は作業効率を大幅に向上させることができます。
BOSS の言葉:エージェントは基本的にはキーをメモリにロードするものです。メモリリークによるキーの漏洩の可能性はありますが、非常に複雑な方法と脆弱性が必要であり、一定の権限も必要です。また、現在の OS はメモリアドレスのランダム化によってこれに対抗しています。
操作手順#
ローカルのプライベートキーを暗号化する#
既に SSH キーペアがローカルにあると仮定します(GitHub を使用している場合、おそらく持っているでしょう。持っていない場合は、ssh-keygen
を使用して生成するか、末尾の SSH 関連記事を参照してください)。
以下は、ローカルのプライベートキーを暗号化するためのコマンドです(<id_rsa_path>
はローカルの SSH プライベートキーのパスであり、通常は~/.ssh/id_rsa
です)。
ssh-keygen -p -f <id_rsa_path>
これで暗号化が完了しました。次のステップは、ssh-agent を起動することです。
SSH-Agent を使用して復号されたプライベートキーを管理する#
以下のシェルコードは、シンプルなssh-agent
を起動し、コンピュータ上のデフォルトのキーペアをエージェントにロードするためのものです。
if [ -z "$SSH_AUTH_SOCK" ] ; then
eval `ssh-agent`
ssh-add # <id_rsa_path>、指定しない場合はデフォルト値を使用します
fi
ただし、この方法にはいくつかの問題があります。新しいシェルセッションを開始すると、エージェントも再起動する必要があります。また、前のセッションが終了する際にエージェントを閉じなかった場合、エージェントはコンピュータのプロセスに常駐し続けます。
SSH-Agent の設定を永続化して便利さとセキュリティを実現する#
⚠️⚠️⚠️ 注意:この方法は個人のコンピュータにのみ適用されます ⚠️⚠️⚠️
上記の問題を解決するために、SSH-Agent の起動設定をシェルの設定ファイルに追加し、ターミナルセッションを開始するたびに自動的に SSH-Agent を起動し、プライベートキーをロードするようにすることをお勧めします。これにより、SSH-Agent の利便性とセキュリティを常に享受することができます。(理解できない場合は ChatGPT を探してみてください。要点は SSH-Agent のSSH_AUTH_SOCK
などの情報をファイルに保存し、他のシェルセッションでも読み取れるようにすることです)
さて、操作はこれだけです
SSH-Agent の使用上の注意点#
もちろん、SSH-Agent を使用することは、本当に安全で心配する必要がないという意味ではありません。実際、SSH-Agent の使用にはまだいくつかの問題があります。以下は、SSH-Agent の使用に関するいくつかの注意事項です:
- 他のユーザーが root 権限を持つコンピュータで
ssh-agent
を実行しないでください:信頼性の低いコンピュータでssh-agent
を実行すると、悪意のあるユーザーがあなたの機密データにアクセスできる可能性があり、セキュリティが危険にさらされます。(日常的に使用しない場合はロックをかけ、共有コンピュータでは実行しないでください) - プロキシ接続の使用には注意が必要です:
ssh-agent
はプロキシ接続を許可することができ、特定の場合には非常に便利です。ただし、プロキシ接続を信頼できるホストにのみ設定する必要があります。そうしないと、機密データが信頼できないホストに取得される可能性があります。 - ログアウト時にキーとエージェントをアンロードする:コンピュータからログアウトするか、シェルセッションを終了する際に、キーと
ssh-agent
をアンロードして権限のないアクセスを防止してください。これは、ssh-agent -k
コマンドを使用して実現できます。
ssh-agent
を使用する際には、上記の注意事項に従って、機密データとシステムの安全性を確保してください。
追記#
実際、SSH キーの管理方法はssh-agent
だけではありません。1password の CLI を試してみることもできますが、私自身はあまり使用したことがありません。
この記事は、私個人のセキュリティに関するメモであり、他の人にとっては冗長かもしれません。これは後でシリーズにする予定です、CyberSecurity シリーズです。私の日常生活でのネットワークセキュリティに関する知識を活用するためのものです。
注意:この記事で説明されている内容は、個人の意見と経験に基づくものであり、絶対的に正確なセキュリティアドバイスではありません。詳細で専門的なセキュリティアドバイスが必要な場合は、セキュリティ専門家や関連する文献に相談してください。
参考資料#
- SSH チュートリアル - 网道: SSH の基礎知識については、阮一峰のチュートリアルを参照してください。
- ssh-agent の使用と一度のパスワード入力の安全な方法: ここでは、堡垒机の転送のシナリオについて触れていないため、記事では言及しません。
- ssh-agent の落とし穴と安全な使用方法: 上記の記事と同じ著者によるもので、ssh-agent の使用に関するいくつかの注意事項が述べられています。
更新履歴#
- 2023-08-17 19:11 v0.7 fish バージョンのコードを追加
- 2023-08-22 22:17 v0.8 太字の部分が多すぎて、記事が非常に派手に見えると同僚から批判されました。そのため、修正しました。
- 2023-08-22 23:05 v1.0 いくつかの冗長な部分を微調整し、合格点になりました。