私の/etc/ssh/
ディレクトリには、3つの異なるタイプのsshキーがあることがわかります。
-rw------- 1 root root 607 Oct 4 22:43 ssh_Host_dsa_key
-rw-r--r-- 1 root root 623 Oct 4 22:43 ssh_Host_dsa_key.pub
-rw------- 1 root root 241 Oct 4 22:43 ssh_Host_ecdsa_key
-rw-r--r-- 1 root root 194 Oct 4 22:43 ssh_Host_ecdsa_key.pub
-rw------- 1 root root 1602 Oct 4 22:43 ssh_Host_rsa_key
-rw-r--r-- 1 root root 378 Oct 4 22:43 ssh_Host_rsa_key.pub
SshのRSA、DSA、およびECDSA鍵の違いは何ですか?3つすべてが必要ですか?
それらの違いと使い方を教えてください。
これらは、ホストを一意に識別するホストキーです。 OpenSSHを初めて起動すると、これらのキーペアが生成されます。 SSHクライアントがサーバーに接続すると、特定のアルゴリズムを使用してホストを認証することを通知します。いくつかサポートされているため、OpenSSHは単純に各タイプの1つを生成します。これにより、サーバーを複数のタイプのフィンガープリントで識別できます。
OpenSSHのmanページから引用 ssh(1)
:
_When connecting to a server for the first time, a fingerprint of the server's
public key is presented to the user (unless the option StrictHostKeyChecking
has been disabled). Fingerprints can be determined using ssh-keygen(1):
$ ssh-keygen -l -f /etc/ssh/ssh_Host_rsa_key
If the fingerprint is already known, it can be matched and the key can be
accepted or rejected. If only legacy (MD5) fingerprints for the server are
available, the ssh-keygen(1) -E option may be used to downgrade the fingerprint
algorithm to match.
_
_.pub
_で終わるファイルは機密ではありません。それらは、接続を試みるすべてのクライアントに送信されます。その拡張子のないファイルは秘密鍵です。それらが開示された場合、誰でもあなたのSSHサーバーをあらゆるクライアントに偽装することができます。秘密鍵は、送信される公開鍵が実際にサーバーによって所有されていることをクライアントに証明するために使用されます。
SSHサーバーに接続すると、一連のイベントが発生します。
known_hosts
_に保存されます。最初の接続では、指紋がユーザーに表示され、ユーザーは指紋を受け入れるように求められます。これは[〜#〜] tofu [〜#〜]、またはTrust-On-First-Useとして知られています。以降の接続では、指紋はサイレントかつ自動的に検証されます。不一致がある場合、SSHクライアントは接続を拒否し、MITM攻撃が発生している可能性があることをユーザーに警告します。この動作により、最初の接続が本物である限り、今後のすべての接続が本物であることが保証されます。 MITM攻撃、またはSSHサーバーが何らかの理由でホストキーを変更すると、これが無効になり、再認証が必要になります。
3つすべてを必要とする必要はなく、それらのいずれかを削除できますが、SSHクライアントは、サポートされているフィンガープリントが_known_hosts
_ファイル。少なくとも、RSAキーは保持する必要があります。すべてのクライアントがECDSAをサポートしているわけではなく、(EC)DSAにはいくつかのセキュリティ問題があるため、通常は推奨されません。ただし、これらすべてを保持することには欠点はありません。セキュリティの観点から一般的に利用可能なアルゴリズムの概要: