我发现ssh-keygen
(“ ssh”包)与puttygen
(“ putty”包)产生了不同的密钥。
如果我使用ssh-keygen
某些ssh服务器创建公钥和私钥,则不会接受我的密钥。如果我puttygen
仅使用一台服务器创建密钥,则不会接受。
为什么Linux存储库不为此提供一些通用的解决方案(软件包)?我找到了另一个软件包ssh-3.2.9.1,该软件包创建了与腻子配合使用的密钥。但是,为什么SSH中没有方便的解决方案?
我发现ssh-keygen
(“ ssh”包)与puttygen
(“ putty”包)产生了不同的密钥。
如果我使用ssh-keygen
某些ssh服务器创建公钥和私钥,则不会接受我的密钥。如果我puttygen
仅使用一台服务器创建密钥,则不会接受。
为什么Linux存储库不为此提供一些通用的解决方案(软件包)?我找到了另一个软件包ssh-3.2.9.1,该软件包创建了与腻子配合使用的密钥。但是,为什么SSH中没有方便的解决方案?
Answers:
OpenSSH是SSH协议的事实上的标准实现。如果PuTTY和OpenSSH不同,则说明PuTTY是不兼容的。
如果使用ssh-keygen
带有默认选项的OpenSSH生成密钥,则该密钥几乎可以与那里的每个服务器一起使用。不接受这样的密钥的服务器将是老式的,使用不同的SSH实现,或者以怪异的限制性方式进行配置。在某些服务器上可能不支持非默认类型的密钥,特别是ECDSA密钥使会话建立的速度稍快一些,但仅受最新版本的OpenSSH支持。
PuTTY使用其他密钥文件格式。它带有在自己的格式和OpenSSH格式之间转换的工具.ppk
。
您发现的此ssh-3.2.9.1是一种商业产品,具有其自己的不同私钥格式。没有理由使用它来代替OpenSSH,它只能兼容一些,需要付费,而且在那里使用它的教程大约为零。
大多数Linux发行版putty
都可用于Linux。您可以putty
在Linux端进行安装,并用于puttygen
将.ppk文件转换为常规的ssh样式密钥文件(称为PEM文件-即使它们的文件名中没有.pem)。
puttygen id_dsa.ppk -O private-openssh -o id_dsa
注意:您还可以puttygen
用于将ssh样式PEM文件导入回putty
。
PuTTY的作者选择了简单性,因此构成putty / ssh 2密钥认证所使用的基础安全性的公共密钥和私有密钥存储在单个专有的.ppk文件中。通常,这些密钥由ssh维护为2个单独的文件。
在Linux上,密钥文件通常保存在目录.ssh中。
在标题为“ 将PEM转换为PPK文件格式 ”的Stack Overflow问题中,这里有一个很好的转换过程概述。
Putty的作者还在putty
用户手册中讨论了使用.ppk文件的原理。您可以在第8.2.12节中阅读有关内容。
uname -a
。Linux发行版:lsb_release -a
。
它们都存储“ SSH协议版本2的RSA密钥对”,并且可以互换转换。但是,关于实际存储的格式差异:
来自https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/key-formats-natively.html
PuTTY密钥格式的优点是:
- 公钥的一半以明文形式存储。OpenSSH的私钥格式对整个密钥文件进行加密,因此客户端必须先询问您的密码,然后才能对密钥进行任何操作。特别是,这意味着它甚至必须向服务器提供公钥进行身份验证之前,必须先询问您的密码。PuTTY的格式以纯文本格式存储公共密钥,并且仅加密私有部分,这意味着它可以自动将公共密钥发送到服务器,并确定服务器是否愿意接受该密钥的身份验证,并且只会要求如果确实需要,请输入密码。
我认为OpenSSH将读取.pub
为此,如果文件出现在私钥文件的旁边,但这常常是出于方便的目的而引起的混乱(我已经看到人们替换了私钥文件,并在文件.pub
旁边放置了过时的文件,然后所产生的SSH身份验证过程感到困惑!)。- 钥匙是完全防篡改的。以明文形式存储公钥的密钥格式可能容易受到篡改攻击,其中以某种方式修改密钥的公共部分,使得使用篡改的密钥进行的签名泄漏有关私有部分的信息。因此,PuTTY的密钥格式包含一个MAC(消息身份验证代码),从密码短语中删除,并覆盖密钥的公共部分和私有部分。因此,我们提供了以明文形式提供公共密钥的便利,但是我们也立即检测到任何篡改攻击的企图,并提供了安全性和便利性的结合,我相信在任何其他密钥格式中都找不到。作为附带好处,MAC还可以覆盖密钥的注释,从而避免了如果有人交换两个密钥并交换注释可能造成的任何恶作剧。
OpenSSH保持公共密钥加密的方法可能它还提供了针对这种攻击的某种安全性,但尚不清楚它是否提供了适当的保护:为机密性设计的加密通常会留下攻击者可以有效修改加密数据的方式。为了实现真正的完整性保护,您需要一个真正专用的MAC,其专门用于此目的。
[ 重点补充]