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
_によって管理されているキーを試すフォールバックはないようです。
-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の後に使用されます。
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