web-dev-qa-db-ja.com

設定なしでsshでテストされる秘密鍵はどれですか?

Sshキーとその設定方法についていくつか質問があることを知っています。しかし、私は私の質問に答えるために何も見つけませんでした。

.sshディレクトリにいくつかのsshキーがあります。一部のリモートでは、異なるキーが使用されます。

ここで、どのホストにどのキーを使用するか.ssh/configで設定したり、エージェントに手動で追加したりしていません。 ssh-keygenでキーを作成したところ、機能します。

今、私は誰がそれに対して責任があり、どのキーが自動的に試行されるのか知りたいですか?約5つのキーの互換性が自動的にチェックされるというメッセージがありますが、この情報がどこにあるのかわかりません。

ssh-keygenはこれらのキーを自動的にエージェントに追加しますか?または、sshはデフォルトで一致するキーを検索しますか?

5

Sshクライアントは、一致するキーが見つかるまですべてのキーをチェックします。

これがどのように機能するかです(これは非常に単純化され、この前に非常に複雑なダンスが行われ、これをすべて暗号化します):

  • サーバーは認証トークンを作成します。
  • トークンは、サーバー上の公開キーを使用して暗号化されます。
  • サーバーは、暗号化されたトークンをクライアントに送信します。
  • クライアントは、既知のすべての秘密鍵を使用して、トークンの復号化を試みます。
  • 成功すると、復号化されたトークンをサーバーに送り返します。
  • トークンが一致した場合、サーバーはクライアントを受け入れます。

キーとなるファイルはクライアントによって異なります。

Opensshクライアント(Ubuntuのデフォルトクライアント)の場合、そのマニュアルページによると、プライベートキーであるはずのファイルは./sshid_rsa、.ssh/id_dsa、.ssh/id_ecdsa、および-iフラグ(it複数のファイルをサポートします)および構成ファイルで宣言されたファイル。

任意のファイルをキーとして使用しようとしたときに行を出力するように-vオプションを指定できます。これは、非キーログインの例です。

$ ssh -v www.hostremoved.com
OpenSSH_5.9p1 Debian-5ubuntu1, OpenSSL 1.0.1 14 Mar 2012
debug1: Reading configuration data /etc/ssh/ssh_config
<...>
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/javier/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/javier/.ssh/id_dsa
debug1: Trying private key: /home/javier/.ssh/id_ecdsa
debug1: Next authentication method: password
<...>

ご覧のとおり、試行するすべてのキーが出力され、すべて失敗します。これをシステムで使用して、自分のシステムでsshが使用しているファイルを検出できます。

既存のキーが見つかって試行された場合の出力を以下に示します

debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: user@xyz

user@xyzは、公開鍵に追加される情報です。


Sshクライアントがどのように秘密鍵を見つけるか疑問に思っているなら、それは魔法ではありません。 Gnome(xfceおよびKDEも)の下には、末尾の.sshを持つ対応する公開キーを持つ.pubディレクトリにキーを自動的に追加する特別なssh-agentがあります。

そのような快適なsshエージェントがない場合は、ssh-add keyを使用して秘密鍵を追加する必要があります。

6
Javier Rivera

公開鍵をリモートマシンのauthorized_keysファイルにコピーしたと仮定すると、sshクライアントは、ローカルマシンの秘密キーがリモートマシンの公開キーと一致するかどうかをチェックします。

2
jackweirdy

Openssh-client 1:5.3p1-3ubuntu7のssh_config(5)からコピー/貼り付け:

IdentityFile

ユーザーのRSAまたはDSA認証IDが読み取られるファイルを指定します。デフォルトは、プロトコルバージョン1の場合は〜/ .ssh/identity、プロトコルバージョン2の場合は〜/ .ssh/id_rsaおよび〜/ .ssh/id_dsaです。さらに、認証エージェントによって表されるすべてのIDが認証に使用されます。

ファイル名では、チルダ構文を使用してユーザーのホームディレクトリまたは次のエスケープ文字のいずれかを参照できます: '%d'(ローカルユーザーのホームディレクトリ)、 '%u'(ローカルユーザー名)、 '%l'(ローカルホスト名)、 '%h'(リモートホスト名)、または '%r'(リモートユーザー名)。

構成ファイルで複数のIDファイルを指定することができます。これらのすべてのIDは順番に試行されます。

一番下の行は、プロトコルのバージョンによって異なります。バージョン2(最近の可能性が高い)では、上記のドキュメントに従ってid_rsaとid_dsaがこの順序で試行されます。新しいバージョンには、id_ecdsaなどの他のタイプのキーがデフォルトで含まれている場合があります。詳細については、使用しているバージョンのマニュアルページを確認してください。

1
Wren T.