公開鍵と秘密鍵は、クライアントとサーバーにどのように保存され、関連していますか?

公開鍵と秘密鍵は、クライアントとサーバーにどのように保存され、関連していますか?

クライアントとサーバーで公開鍵と秘密鍵、構成ファイルを一致させようとしましたが、不一致を解決できませんでした。 SSH経由でサーバーに正常に接続できますしかし、不一致の状況。これは少し心配です。

どこに何が保存されているか正確にお見せしましょう。

クライアント:Macサーバー:Ubuntu(AWSでホスト)

私のローカルMacの/Users/sm/.sshディレクトリにあるファイル

ls -la 
Sanjays-iMac:.ssh sm$ ls -la
total 24
drwx------   5 sm  staff   160 26 Nov 21:29 .
drwxr-xr-x+ 59 sm  staff  1888 26 Nov 21:29 ..
-rw-------   1 sm  staff  1696 26 Nov 20:49 id_rsa
-rw-r--r--@  1 sm  staff   451 26 Nov 20:50 id_rsa.pub
-rw-r--r--   1 sm  staff  1151 26 Nov 21:08 known_hosts

私のUbuntuサーバー上のファイル:

ubuntu@ip-172-31-30-19:~/.ssh$ ls -la
total 12
drwx------ 2 ubuntu ubuntu 4096 Nov 26 14:37 .
drwxr-xr-x 8 ubuntu ubuntu 4096 Oct 30 18:02 ..
-rw------- 1 ubuntu ubuntu  391 May 25  2018 authorized_keys

Ubuntuの現在の作業ディレクトリ:

ubuntu@ip-172-31-30-19:~/.ssh$ pwd
/home/ubuntu/.ssh

authorized_keysサーバーのファイルコンテンツ:

ubuntu@ip-172-31-30-19:~/.ssh$ cat authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA....0g1bMv+p11K8MDH sanjaydev

(個人情報保護のため内容が切り捨てられました。)

同様に、ローカルサーバーにKnown_hostsファイルがあります。

Sanjays-iMac:.ssh sm$ cat known_hosts
54.251.104.13 ecdsa-sha2-nistp256 AAAAE2VjZHNhLX..Xsb/RBY=
52.76.85.25 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTI....hAkfLOc5g=
ec2-13-127-241-121.ap-south-1.compute.amazonaws.com,13.127.241.121 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXN....fu5Co4vYB0=
ec2-13-232-81-251.ap-south-1.compute.amazonaws.com,13.232.81.251 ecdsa-sha2-nistp256 AAAAE2VjZHNhL....nhNcRyfu5Co4vYB0=
35.154.168.85 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNo....NcRyfu5Co4vYB0=
13.126.30.42 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTIt....NcRyfu5Co4vYB0=

(個人情報保護のため内容が切り捨てられました。)

今私の質問は次のとおりです。

何が何であるべきですか?

クライアントのauthorised_keys公開鍵はサーバー上のファイルの項目の 1 つと一致しなければならず、サーバーの公開鍵はクライアント上のファイルの項目の 1 つと一致しなければならないとknown_hosts思います。

残念ながら、手動で一致しようとすると、正確には一致しません(最初の数文字だけが一致します)。-i <pemfile>コマンドラインでこれを指定しなくてもssh接続が継続されることは注目に値します。

答え1

キーには2つのタイプがあります。仕える人または所有者ユーザーにサーバーを識別するキーユーザーログインを許可するキーです。

サーバーの秘密ホストキーはに保存されます/etc/ssh/。その公開鍵は、プロンプトの後に自動的にknown_hostsクライアントに追加されます~/.ssh。これらのキーの目的は、中間者(MITM)攻撃を検出することです。ssh ...通常どおり入力中にホストキーが突然変更され、サーバーに何も変更されていない場合は、疑わしいはずです。

通常、ホストキーは気にする必要はなく、自動的に管理されます。

ユーザーキーを使用すると、パスワードを入力しなくても認証できます。ユーザーキーはクライアントによって管理されます。id_rsa.pub公開鍵と秘密鍵で構成される鍵ペアを作成しましたid_rsa。公開鍵は~/.ssh使用されず、必要に応じて使用できるように保存されます。~/.ssh/authorized_keysサーバー上のそのユーザーの公開鍵に公開鍵を手動で追加する必要があります。 1行に1つのキーが必要です。authorized_keysファイルが空の場合は、コピー(パスワードscpとパスワードなど)でid_rsa.pub十分です。

したがって、あなたの場合

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA....0g1bMv+p11K8MDH sanjaydev

Ubuntuサーバー上のファイルのキーは、Macのキーauthorized_keysと同じでなければなりません。id_rsa.pub

同じですが、まだログインできない場合は、別の問題があります。

答え2

キー形式の楽しみ

他の回答にリストしたコメントを見ると、深刻な形式の問題があるようです。

1つの標準化された手順を使用して生成された暗号化鍵が、他の標準化された手順によって生成された鍵と数学的に同じであることは事実です。ただし、特定の暗号化プロトコルには特定の形式のキーが必要です。

切り替えキー

  • opensslからSSHキーへ

PEM形式で生成されopensslエクスポートされたキーは、このプログラムを使用してSSH形式に変換できますssh-keygen

ssh-keygen -i -m pem -f key.pem

  • PEMのSSHキー

ssh-keygenを使用して生成されたキーはPEM形式に変換できます。

ssh-keygen -e -m pem -f id_rsa.pub

  • PGPからSSHキーへ

GPGで生成されたPGPキーは、次のオプションを使用してSSH形式に変換できます--export-ssh-key

gpg --export-ssh-key <keyid>

主な場所

他の回答に記載されているように、リモートシステムにはssh形式のファイルに保存されている公開鍵が必要です~/.ssh/authorized_keys。ローカルシステムでは、次の秘密鍵が必要です。

  • id_rsaとして保存~/.ssh

または

  • ssh -iオプションで利用可能

または

  • 以下を使用してSSHエージェントに追加するssh-add

または

  • sshcontrolGPGを使用してSSHエージェントにファイルを追加する

公開鍵の比較

公開鍵を比較するには、鍵の形式が同じでなければなりません。そうでなければ、キーが数学的に同じオブジェクトでも同じように見えません。したがって、PEM形式を使用してSSH公開鍵を作成したことを示したため、その公開鍵がopensslサーバーファイルに保存されている公開鍵と異なる可能性があります~/.ssh/authorized_keys

PEM形式のキーは次のとおりです。

-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAr/CvdghgkYT1Z38d
...
NlBcCYnrjvfFAj5HQydWc9CfP02rdtCIewIDAQAB
-----END RSA PUBLIC KEY-----

SSH公開鍵は次のとおりです。

ssh-rsa AAAAB3N...voZypjC/Y2UFwJie...t20Ih7

PGP公開鍵は次のとおりです。

-----BEGIN PGP PUBLIC KEY BLOCK-----

mQENBFN/ZjIBCADad3mv...
...
nE42ZvKt632ZAQ==
=EKbR
-----END PGP PUBLIC KEY BLOCK-----

したがって、同じ形式のキーを比較していることを確認してください。

答え3

サーバーの sshd キーknown_hosts- in/etc/ssh/*pub

答え4

ファイルauthorized_keysには内容を含む行が含まれ、ファイルid_rsa.pubknown_hostsはサーバーのホストキーを含む行が必要です。 (サーバーは通常ホストキーを以下のファイルに保存します/etc/ssh/。)

また、キーペアでなければならないid_rsaという点で一致が必要ですが、手動で解放しない限り、ssh-keygenは常にキーペアを配置します。id_rsa.pub

関連情報