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


44

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

Answers:


58

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

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

您实际上可以使用设置更改SSH服务器在文件中查找密钥的位置。/etc/ssh/sshd_configHostKey /path/to/host/key

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

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


1
即使这些术语在技术上不正确,Google的“设置ssh指纹”结果也令人吃惊。很好,我发现了这些。
Bart van Heukelom 2012年

4
谢谢你 注意:如果将ssh-keygen指向公共密钥,则不需要'sudo'。即:ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub。另外,对于我的安装,ssh守护进程使用的是ECDSA密钥,而不是RSA密钥,因此实际上我必须运行的是ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
约翰·克莱门茨

从我的旧硬盘驱动器获取公钥并在新安装中使用它们,并在/ etc / ssh中覆盖它们,是否存在任何问题?钥匙就是钥匙吧?
亚当

@Adam我认为这样做没问题。这应该有助于避免在您远程登录并且密钥已更改时发生问题(如果重新安装生成了新密钥,则会发生这种情况。)
Azendale

3
当我ssh第一次从14.04 连接到主机时,它显示MD5指纹。要使ssh-keygen16.04显示MD5指纹,必须使用-E md5选项。
jarno

14

SSH主机密钥存储在中/etc/ssh/,通常不需要选择。这些密钥是在安装openssh-server软件包时生成的。

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

 


7

ssh-keygen不会在您的服务器上生成SSH指纹。这是由SSH服务器生成的。ssh-keygen为您的系统创建一个公用/专用密钥对,您以后可以使用它来访问SSH服务器,而不必将纯文本密码发送给该服务器。

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


3
请注意,您应该能够为服务器生成ssh密钥(与您所说的相反),但是您只需要将它们放在正确的位置即可将它们用于此目的。
Azendale
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.