質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Q&A

解決済

3回答

9568閲覧

knownhostsに登録される接続先の鍵の種類はどのように決まるのか?

0364649.com

総合スコア13

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

0グッド

0クリップ

投稿2020/09/17 06:09

knownhostsに追加される接続先の情報を見ていて疑問に思ったのですが
鍵の種類(ssh-rsa,ecdsa-sha2-nistp256)は接続先(以下、SSHサーバ)の
何の情報によって決定されるのでしょうか?
SSHサーバには同じ公開鍵を配布しているのですが、接続するサーバによって鍵の種類が
ssh-rsaだったりecdsa-sha2-nistp256だったりします。

鍵の種類は秘密鍵と公開鍵作成時に決まるものと思っていたのですが、
理解が間違っていたらご指摘いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ホスト鍵とユーザ認証鍵は違う物だという事は既に出ているので、known_hostsに書かれるホスト鍵の決まり方について書きます。

sshで接続する時、クライアントとサーバは自分が対応している(使いたい)暗号方式等をお互いに伝え合います。この手順をKey Exchange(KEX)と呼びます。
このKEXで決まる物の中にホスト鍵認証方式が有ります。KEXの最終段階でサーバは決定したホスト鍵認証方式に対応する形式のホスト鍵を送り、クライアントはその送られて来たホスト鍵をknown_hostsに記録します。

KEXでの使用する暗号方式等の決定方法は「クライアントとサーバの両方が対応している物のうち、クライアントが最初に指定した物」となります。これはホスト鍵認証方式に限らず、鍵交換方式や通信路の暗号化方式等でも同じです。

例えばクライアントとサーバがホスト鍵認証方式として以下を指定したとします。

  • クライアント: ssh-xmss@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-rsa,ssh-ed25519
  • サーバ: ssh-ed25519,rsa-sha2-256,rsa-sha2-512,ssh-rsa,ssh-dss

この場合、クライアントとサーバ両方が対応している方式は

  • rsa-sha2-512
  • rsa-sha2-256
  • ssh-rsa
  • ssh-ed25519

の4つですが、この内でクライアントが最初に指定したrsa-sha2-512がホスト鍵認証方式として決まり、rsa-sha2-512で使われるRSA(ssh-rsa)鍵がクライアントに送られます。

ホスト鍵認証方式の指定は、OpenSSHの場合は設定ファイル(クライアント: /etc/ssh/ssh_config, ~/.ssh/config, サーバ: /etc/ssh/sshd_config)のHostkeyAlgorithmsで設定できます。
ただしクライアント側は設定がそのまま使われますが、サーバ側は対応する鍵が無い方式が取り除かれます。

投稿2020/09/21 19:48

doda

総合スコア947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0364649.com

2020/09/22 15:48

回答ありがとうございます。 クライアントもサーバも同じ暗号化方式を持っている場合はクライアント側が使用する暗号化方式の決定権があるということですね。(勘違いしてたらすいません。ちゃんと勉強します。) 今一度、configファイルは確認してみます。
guest

0

ベストアンサー

まず最初に目的の違う2種類の鍵ペアがあるということを理解する必要があると思います。
公開鍵認証の際に使う鍵ペアと、ホストのなりすましを防ぐ目的でやりとりされるホストキーの鍵ペアです。(以下ファイル位置はLinuxMint上のOpenSSHの場合)

公開鍵認証で使う鍵は、「/.ssh/id_rsa」と「/.ssh/id_rsa.pub」のようなファイルで、公開鍵を接続しようとするリモートホストの「~/.ssh/authrized_keys」に登録します。

ホストキーの鍵ペアは「/etc/ssh/ssh_host_rsa_key」「/etc/ssh/ssh_host_rsa_key.pub」のようなファイルで、初めて接続するホストの公開鍵はサーバーからコピーされ「~/.ssh/known_hosts」に登録されていきます。
ホストキーは、今まで接続していたリモートホストと違うホストがなりすまして接続を受け付けた場合に、それを検出しそれを防ぐ仕組みで使われます。

「knownhostsに追加される接続先の情報」は接続先ホストのホストキーの公開鍵で、「SSHサーバには同じ公開鍵を配布しているのですが」の鍵は公開鍵認証に使用する公開鍵であり別物で、鍵の種類が違っていても互いに影響ありません。

ホストによって、ホストキーの公開鍵の種類が何故違うかについてはあまり詳しくありません。OSの種類やバージョンや、sshd設定ファイルによって決定しているんじゃないかという気がします。

投稿2020/09/17 13:28

hidezzz

総合スコア1248

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0364649.com

2020/09/18 05:53

回答ありがとうございます。 hana_yama_sannにも回答頂き、「これは意味不明です。。。」の意味が分かりました。 雑な質問にも関わらず、回答頂きありがとうございました。 皆様の知見の共有に感謝です。
guest

0

サーバ(必ずしもそうである必要は無いが)を立ち上げて、
SSHを有効にすると、そこで鍵が生成されますよね。
その時OSやバージョンによって生成される種類が違うという、
それだけの事ではないでしょうか。

>>SSHサーバには同じ公開鍵を配布しているのですが、

これは意味不明です。クライアントの鍵とサーバの鍵は別物です。

投稿2020/09/17 12:54

hana_yama_san

総合スコア923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0364649.com

2020/09/18 05:50

回答ありがとうございます。 勉強不足ですいません。 クライアントの鍵とサーバの鍵が別物だという理解がありませんでした。 hidzzzさんにも回答頂きましたが、理解できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問