Bo2SS

Bo2SS

SSH免密ログインの実現と本質的な考察

実験環境: Ubuntu18.04 リモートサーバー + WSL 2 ローカル

評価の説明#

最終的な効果#

【ローカルでのテスト】

  • 画像
  • ssh ホスト名で免密ログインが可能です

  • また、緑色です :)


実現のプロセス#

2 つのステップ⭐#

【鍵ペアの生成👉公開鍵のコピー】

  • ① ローカルの WSL 2 で鍵ペアを生成します(.pub 拡張子は公開鍵です)、ここでは RSA 暗号化アルゴリズムを選択します
ssh-keygen -t rsa
    • ssh-keygen --help を使用して鍵のタイプなどの情報を確認できます
    • 通常、パスフレーズ(秘密鍵を暗号化するためのもの)は設定する必要はありませんが、免密ログイン時にパスワードを入力する場合を除きます
  • ② 公開鍵をリモートサーバーに設定します、1 つのコマンドで完了します
ssh-copy-id ten
    • ここで使用している ten はリモートサーバーのエイリアスです(ユーザー名はデフォルトでローカルユーザーですが、hz@ten のような形式も使用できます)、具体的な設定方法は「Linux 入門及び使用」のノートのまとめ - 5 基本システム - 追加の知識点を参照してください:ssh エイリアスを使用してクラウドサーバーにログインする
    • または、ssh-copy-id ユーザー名@IPのようにしても構いません。以下の文章では ten とユーザー名 @IP は同等です

🔚これで免密ログインが実現され、クラウドサーバー ten に接続できます

ssh ten

ssh-copy-id の詳細な手順#

ssh-copy-id の効果を手動で実現したい場合、次の手順を参考にしてください:

  • ローカルの公開鍵をリモートサーバーのホームディレクトリにコピーします
scp ~/.ssh/id_rsa.pub ten:
  • リモートサーバーのホームディレクトリに ssh でログインし、公開鍵の内容を鍵の設定ファイルに追加します
cat id_rsa.pub >> .ssh/authorized_keys
rm id_rsa.pub  # 削除しても構いません
    • authorized_keys には複数の異なる公開鍵を保存できます。各行が対応します
    • .ssh ディレクトリと authorized_key ファイルが存在しない場合は、自分で作成してください
    • 【重要】の 2 つの【権限】は特定の設定が必要です:.ssh ディレクトリには所有者のみがすべての権限を持ち、authorized_keys ファイルには所有者のみが読み書きの権限を持つようにします。そうしないと、免密ログインがうまくいきません
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

🔚これで免密ログインも実現されます

【権限の要件】

  • man sshd を参照してください
    • 画像
    • セキュリティ上、権限の設定が要件を満たさない場合、公開鍵ファイルを使用できません

追加の説明#

  • /etc/ssh/sshd_config の PubkeyAuthentication が yes に設定されていることを確認し、変更した場合は sshd サービスを再起動する必要があります:systemctl restart sshd.service
  • リモートサーバーのどのユーザーに免密ログインしたいかによって、公開鍵を対応するユーザーの【ホームディレクトリ】に配置します

免密ログインの本質#

プロセス⭐#

  • ローカルから SSH 接続を開始し、ローカルの公開鍵を送信します
  • リモートサーバーは公開鍵を受け取り、ローカルの公開鍵と比較します
  • 一致する場合、サーバーは公開鍵で「ランダムな文字列」を暗号化してローカルに送り返します
  • ローカルは秘密鍵で「ランダムな文字列」を復号化し、結果をサーバーに送り返します
  • 一致する場合、接続が確立されます

❗ 参考:SSH 免密ログインの原理と実装—— 掘金

【ここではパスワードログインと免密ログインの 2 つの方法の具体的なプロセスが言及されています】

  • パスワードログイン
    • 画像
    • リモートサーバーの公開鍵を使用してパスワードを暗号化します
  • 免密ログイン
    • 画像
    • 送信プロセスでは秘密鍵は公開されません

パスワードログインは免密ログインよりも簡単で、接続時にパスワードログインの方が速いです
しかし、免密ログインの方がより安全です:

  • ① パスワードは破られやすいです
  • ② 記事を参照すると、免密ログインには「中間者攻撃」のリスクがないと述べていますが、私は完全に同意しません
    • 両方の方法はまず.ssh/known_hosts を使用してマシンを識別します
    • ただし、免密ログインでは公開鍵の一致がさらに行われるため、免密ログインの方が安全です
    • 【注意】ただし、これはローカルの公開鍵が中間者に盗まれていない場合です

追加の説明#

  • ssh -v ten:より詳細なプロセスが表示されます
  • インターネット上には広く流布している図がありますが、詳細なエラーがあります:
    • 画像
    • リクエスト情報はユーザー名と IP ではありません❌、ローカルの公開鍵です
    • 公開鍵には IP が保存されていません [それはリスクをもたらすでしょう]、保存されているのはローカルのユーザー名とホスト名です
    • ローカルまたはリモートサーバーの公開鍵からユーザー情報 [ユーザー名とホスト名] を削除しても、免密 SSH 接続はできます
    • これからわかるように、リモートサーバーは公開鍵文字列自体を検証しています!

考察ポイント#

  • クラウドサーバーに初めてログインしたときに表示される身元確認は何ですか?
    • 画像
    • ECDSA キーの指紋とは何ですか?リモートサーバーからのキーの指紋であり、ssh をインストールしたマシンごとに異なる指紋があります
    • yes を入力すると、指紋の関連情報がローカルの.ssh/known_hosts に保存され、次回接続時に偽のマシンが存在する場合に警告が表示されます
    • 初回接続時に中間者がいる場合、おめでとうございます
    • 参考:リモートホストの SSH 指紋を検証する—— ブログ

追加#

  • ssh-copy-id の使用方法

    • ローカルの現在のユーザーの公開鍵をリモートマシンのホームディレクトリ /.ssh に直接コピーします
    • 画像
    • より簡単で直接的であり、特定の公開鍵や特定のポートを指定することもできます
  • sshd_config の詳細な設定説明には man sshd_config を使用できます

  • ⭐パスワードログインを無効にするには、/etc/ssh/sshd_config の PasswordAuthentication を no に変更します

    • 画像
    • sshd サービスを再起動します:systemctl restart sshd.service、有効になります
  • 公開鍵の場所は /etc/ssh/sshd_config の AuthorizedKeysFile で設定できます

    • 画像
    • デフォルトでは、ユーザーのホームディレクトリの対応する場所で公開鍵を検索します
  • ChanllengeResponseAuthentication とは何ですか?

    • 画像

ChallengeResponseAuthentication no
# 任意のタイプのパスワード認証を許可します!したがって、login.conf で指定された認証方法はすべて適用できます!
# ただし、現在は PAM モジュールを使用して認証を管理することを好むため、このオプションを no に設定できます!


参考資料#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。