web-dev-qa-db-ja.com

OpenSSHはどの順序で秘密鍵を試しますか?

allが与えられている場合、OpenSSHクライアントがサーバーに対して認証するための秘密鍵を試す順序で適切なドキュメントを見つけるのに苦労しています以下が存在します:

  • _~/.ssh_のデフォルト名を持つキーファイル。 _~/.ssh/id_rsa_、
  • _~/.ssh/config_を介して特定のホストで使用するように設定されているデフォルト以外の名前のキーファイル
  • _ssh-agent_によって管理されるキー。

これらの場所はすべて常に試行されますか(ホストが_~/.ssh/config_のエントリに一致する場合)、どの順序で試行されますか?

背景:サーバーに対する認証にのみ使用できる_~/.ssh/id_rsa_があります[〜#〜] a [〜#〜]、およびサーバーに対する認証にのみ使用できる_ssh-agent_によって管理される別のキーがあります[〜#〜] b [〜#〜]ssh[〜#〜] b [〜#〜]にしようとすると、only_~/.ssh/id_rsa_が試行されます。 _ssh-agent_によって管理されているキーを試すフォールバックはないようです。

8
sschuberth

-v、-vvなどのオプションについて知っていますが、sshがどのように動作するかを試す前に知りたいです。試行錯誤よりも、より健全な方法で見つける必要があります。

ソース、ルークを使用してください!

OpenSSHはオープンソースなので、試行錯誤の代わりに、コードを読んで何が起こっているのかをよりよく理解できます。 _ssh.c_ から始めるのが良いでしょう。これは、これを処理する関数load_public_identity_files(void)を持っています。まず、PKCS#11(スマートカード、HSM)のキーが使用されます。

_(nkeys = pkcs11_add_provider(options.pkcs11_provider, NULL,
_

そして_options.identity_files_によって提供されるキー:

_for (i = 0; i < options.num_identity_files; i++) {
_

この変数は _readconf.c_ で設定されます。

_if (options->num_identity_files == 0) {
    add_identity_file(options, "~/", _PATH_SSH_CLIENT_ID_RSA, 0);
    add_identity_file(options, "~/", _PATH_SSH_CLIENT_ID_DSA, 0);
#ifdef OPENSSL_HAS_ECC
    add_identity_file(options, "~/", _PATH_SSH_CLIENT_ID_ECDSA, 0);
#endif
    add_identity_file(options, "~/",
        _PATH_SSH_CLIENT_ID_ED25519, 0);
}
_

ファイルの実際のパスは _pathnames.h_ で定義されています。

_#define _PATH_SSH_USER_DIR  ".ssh"
[...]
#define _PATH_SSH_CLIENT_ID_DSA     _PATH_SSH_USER_DIR "/id_dsa"
#define _PATH_SSH_CLIENT_ID_ECDSA   _PATH_SSH_USER_DIR "/id_ecdsa"
#define _PATH_SSH_CLIENT_ID_RSA     _PATH_SSH_USER_DIR "/id_rsa"
#define _PATH_SSH_CLIENT_ID_ED25519 _PATH_SSH_USER_DIR "/id_ed25519"
_

背景の質問へ:

これがIdentitiesOnlyオプションが存在する理由であり、管理するキーが複数ある場合に_~/.ssh/config_で使用する必要がある理由です。 _ssh-agent_ IDは、デフォルトのIDの後に使用されます。

8
Jakuje

SSHクライアントがサーバーに対して認証するために秘密鍵をどのように試行するかを確認したい場合は、-vオプションを指定して実行できます。

私の場合、それは次のようになります:

debug1: Trying private key: /Users/atolkachev/.ssh/id_rsa
debug1: Trying private key: /Users/atolkachev/.ssh/id_dsa
debug1: Trying private key: /Users/atolkachev/.ssh/id_ecdsa
debug1: Trying private key: /Users/atolkachev/.ssh/id_ed25519
1