SSH服务器指纹在哪里生成/存储?

我安装了openssh-server并使用ssh-keygen创建了一个密钥。 然后,我尝试使用本地端口转发通过执行ssh -L 8080:www.nytimes.com:80 127.0.0.1来测试它ssh -L 8080:www.nytimes.com:80 127.0.0.1 。 但是,此命令提供的密钥指纹不是我执行ssh-keygen -l时获得的密钥指纹。 即使我删除了我的.ssh目录,我仍然得到相同的指纹,这不是我用ssh-keygen创建的指纹。 我的系统上还有另一个密钥吗? 这把钥匙在哪里? 如何选择此密钥以供openssh-server使用?

进行SSH会话时,会涉及两个不同的密钥对(每对密钥对)。 一个是用户的密钥,存储在~/.ssh 。 用户的SSH密钥标识有时用作登录到另一台计算机的凭据(如果已设置基于密钥的登录)。

另一个是SSH服务器的密钥。 这是您第一次连接到其他服务器时看到的指纹的关键。 此密钥的标识用于确保您登录到您打算使用的SSH服务器。 如果您使用密码这很重要,因为您不想意外尝试登录攻击者计算机:攻击者会在您输入密码时获取密码。然后攻击者可以登录到您认为已登录的计算机至! (这被称为“中间人攻击” ) SSH服务器在您登录时用于标识自身的密钥位于/etc/ssh/ ,通常命名为ssh_host_rsa_key

您实际上可以使用HostKey /path/to/host/key设置更改SSH服务器在/etc/ssh/ssh d _config文件中HostKey /path/to/host/key

默认情况下, ssh-keygen将为当前用户创建一个密钥,默认情况下,该密钥将存储在~/.ssh 。 用户密钥和服务器密钥的格式相同; 区别在于它们的放置位置以及/etc/ssh/sshd_config是否具有指向它们的HostKey指令。 安装openssh-server软件包时,它会自动生成供服务器使用的密钥。 这就是具有未知指纹的密钥来自的地方。 如果要查看SSH服务器(RSA *)密钥的指纹,可以运行ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub

*有不同的加密算法。 每个人都使用不同的密钥。 常见的有DSA(弱),RSA(旧默认)和ECDSA(新默认)。

SSH主机密钥存储在/etc/ssh/ ,您通常无需选择。 安装openssh-server软件包时会生成这些密钥。

您可以通过ssh-keygen -l -f /etc/ssh/ssh_host_key.pub列出密钥的指纹,但您需要为每个公钥重复此操作。

ssh-keygen不会在您的服务器上生成SSH指纹。 这是由SSH服务器生成的。 ssh-keygen为您的系统创建公钥/私钥对,以后可以使用它来访问SSH服务器,而无需将纯文本密码传输到服务器。

服务器的指纹显然不会显示为您生成的公钥/私钥对的指纹,因为它们彼此分开。