1. ホーム
  2. ssh

[解決済み] known_hostsには実際に何が入っているのですか?[クローズド]

2022-03-01 06:47:05

質問

を持たなかった。 .ssh を実行するまで

ssh [email protected]

これで.sshディレクトリが作成され、1つのファイルが作成されました。 known_hosts .

こんなテキストが入っていました。

foo.com,107.180.00.00 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuJfqSnraBz//Ux4j/hZpLv2eYUxNUgCk+9ClqoSgfcu4vXbWtUGSjo75UVQf+uguOeBnRLppJJ3mt0R5c/PPcawUGWfffk33t+biYcqra9xUcyfiGtO/Icko2L1J0EYTXM/8x8VK6UYFMfad2gltnZRa8Am50oHTXot1Df0RljUBxvh/UhmTJUrODpyrl2xY1OMWjM+S6uYCMNeSQGEpNfsWiCIStRnctMZSxiYJOLTSC4F2GF7B8pYFBn5rSwVHp17WCdO+4BZfwvH3HSSH8IWoyFhki+NlG912SEBJXcryvc0JPfAB9DTB4mRImjgrRT8vz5QeaCDrh8k4/A+U1fff

これは、何らかの方法で私のサーバーから公開鍵または秘密鍵を抜き取ったのではないかと思ったのですが、そうではありませんでした。

これは何ですか?何に使うのですか?

私はsshとその仕組みについてもっと学びたいと思っているところです。 例えば、今回のケースでは、ローカルマシンに秘密鍵をセットアップしていなかったので、予想通りパスワードの入力を要求されました。

研究内容

によると、サーバーの公開鍵であると思われます。

https://security.stackexchange.com/questions/20706/what-is-the-difference-between-authorized-key-and-known-host-file-for-ssh

解決方法は?

上記の回答やコメントについて補足します。 sshセッションには4つの構成要素があります。

  1. 暗号化(セッションごとに鍵交換した後に得られる共通鍵)
  2. データの完全性(SHA、HMACなどを用いたMAC)
  3. 鍵交換方法
  4. 公開鍵方式またはホスト鍵方式

SSHアルゴリズムネゴシエーションには、鍵交換ステートマシン このメッセージは、アルゴリズムリストとともに SSH_MSG_KEXINIT メッセージが送信されたときに開始されます。

鍵交換方式、または単にkexは、暗号化用のセッションキーとホスト認証用のホスト公開鍵( ssh-rsa , ssh-dss ...)がクライアントに送信されます。以下のステップは、Diffie hellman 鍵交換アルゴリズムを使用した kex の基本的なステップです。

RFCの引用 https://www.rfc-editor.org/rfc/rfc4253

<ブロッククオート

以下の手順で鍵の交換を行います。 この中で、Cは クライアント、Sはサーバー、pは安全な大きな素数、gは生成子 GF(p)の部分群、qはその部分群の次数、V_SはSの の識別文字列、V_C は C の識別文字列、K_S は S の 公開ホスト鍵;I_C は C の SSH_MSG_KEXINIT メッセージ、I_S は S の この部分の前に交換されたSSH_MSG_KEXINITメッセージ。 が開始されます。

<ブロッククオート
  1. C は乱数 x (1 < x < q) を生成し、次の計算を行う。 e = g^x mod p. CはeをSに送信する。
  1. Sは乱数y(0 < y < q)を生成し、以下を計算する。 f = g^y mod p. Sはeを受け取り、K = e^y mod p.を計算する。 H = hash(V_C || V_S || I_C || I_S || K_S || e || f || K)である。 (これらの要素はその型に従って符号化される。) と、そのホスト鍵の秘密鍵でHに署名sを行う。 Sが送る (K_S || f || s)をCに送信する。 第二のハッシュ化操作。
  1. Cは、K_Sが本当にSのホスト鍵であることを検証する(例えば、以下を使用する)。 証明書またはローカルデータベース)。 Cはまた、以下を受け入れることができます。 しかし、そうすると、鍵の検証を行わずに プロトコルはアクティブな攻撃に対して安全ではありません。 多くの環境では、短期的には実用的な理由である)。 次にCは は、K = f^x mod p、H = hash(V_C || V_S || I_C || I_S || K_S)を計算します。 || e || f || K)、そしてH上の署名sを検証する。

あるシステムでは、ステップ3で述べたローカルデータベースは、.ssh/known_hostsファイルである可能性があります。 つまり、公開鍵は鍵交換の際にホストからクライアントに送信されます。

現在、以下の公開鍵・証明書フォーマットが定義されています。

<ブロッククオート

ssh-dss REQUIRED sign 生のDSSキー

<ブロッククオート

ssh-rsa RSA 生の鍵に署名することを推奨します。

<ブロッククオート

pgp-sign-rsa オプション OpenPGP 証明書 (RSA キー) に署名します。

<ブロッククオート

pgp-sign-dss OPTIONAL OpenPGP 証明書 (DSS キー) に署名する。