这是我在从 Macbook Pro 到 Linux(Ubuntu 11.10)服务器的 SSH 中遇到的一个奇怪问题。我在主目录下的远程 Linux 服务器上设置了一个 DSA 密钥,如下所示:
/home/me/.ssh/authorzied_keys
我还为机器上名为“foo”和“bar”的其他几个帐户设置了相同的 DSA 密钥。我可以不用密码登录所有帐户。因此,DSA 密钥都设置正确。
我在调试 SSH 连接时看到了奇怪的行为。在连接期间,SSH 调试输出以下内容:
debug2: key: /Users/me/.ssh/id_dsa (0x7f91a1424220)
debug2: key: /home/foo/.ssh/id_dsa (0x7f91a1425620)
debug2: key: /home/bar/.ssh/id_rsa (0x7f91a1425c60)
debug2: key: /Users/me/.ssh/id_rsa (0x0)
- 这很奇怪,原因有很多,但本质上,为什么 SSH 会列出服务器上的密钥(/home/foo/.ssh/id_dsa 和 /home/bar/.ssh/id_rsa)?
- 这些文件甚至不存在于服务器上,那么为什么要列出它们呢?
- 我没有登录“foo”或“bar”帐户,那么为什么 SSH 甚至会列出这些帐户?
- 在我的 Macbook Pro 上,我只有一个 DSA 密钥,但 SSH 列出了一个 RSA 密钥,这是怎么回事?
- 服务器上的另一个用户登录时没有收到任何这些消息,并且他们的 DSA 密钥设置和 Macbook Pro 设置与我的完全相同?
有人知道这些消息是什么以及为什么 SSH 会输出它们吗?
答案1
丹尼尔是正确的,你的 ssh-agent 加载了什么?
ssh-add -l
你可以使用以下命令清除 ssh-agent 中的所有内容
ssh-add -D
还要注意的是,Mac OS X (10.5+) 上的 ssh-agent 通常只有在需要时才会运行。因此 SSH_AGENT_PID 未设置,SSH_AUTH_SOCK 已设置,这样 launchd 只会在套接字首次启动时创建 ssh-agent 进程用过的。
答案2
查看 OpenSSH 源代码,static void pubkey_prepare(Authctxt *authctxt)
位于sshconnect2.c
:
它按以下顺序从以下来源收集(然后列出)密钥:
/*
* try keys in the following order:
* 1. agent keys that are found in the config file
* 2. other agent keys
* 3. keys that are only listed in the config file
*/
配置文件并options.identity_files
在代码中引用在中定义其数据类型的IdentityFile
指令。ssh_config
readconf.h
从输出顺序来看,未知密钥夹在id_dsa
和之间id_rsa
,请检查您的 SSH 代理。