作为 Windows 用户,我从 CoreFTP Lite 生成了一对 DSA 密钥并将其发送给运行 SFTP 服务器的第三方。
他们告诉我,有效的 DSA 密钥需要以 ssh-dsa 开头,以 username@systemname 结尾。
CoreFTP 既不生成 ssh-dsa 标头,也不生成 username@systemname 页脚。我尝试使用 WinSCP,但也没有生成它们。
Windows 和 Linux 中的 SFTP 工作方式有何区别?
如果我在文本末尾添加 useraccount@systemname ,它会起作用吗?Linux 系统如何验证我的系统名为“systemname”?如果无法验证,添加它的目的是什么?
答案1
Windows 和 Linux 中的 SFTP 工作方式有何区别?
不。唯一的区别是密钥存储格式被各种程序使用。大多数 Linux 系统将 OpenSSH 作为 SSH/SFTP 服务器运行,并且您的第三方正在请求与 OpenSSH 兼容的公钥。
核心FTP以 OpenSSH 格式存储私钥,以类似于 OpenSSH 的格式存储公钥。
您可以使用 PuTTYgen 或
ssh-keygen -yf
提取公钥,因为“私有”文件始终包含整个密钥对。或者你也可以
ssh-dss
在 CoreFTP 公钥数据前添加“ ”使其与 OpenSSH 兼容。例如:ssh-dss AAAAB3NzaC1kc3M...
(为什么 CoreFTP 会忘记标头?可能是开发人员认为它没有必要,因为 Base64 编码的数据
ssh-dss
在开始时就已经有标头了。此外,谁会曾经需要与最流行的 SFTP 软件兼容吗?油灰使用自己的“PPK”密钥格式。
当您在 PuTTYgen 中打开密钥(或生成新密钥)时,OpenSSH民众关键是显示在顶部的大框中。
这私人的密钥可以通过菜单导出为 OpenSSH 格式。
温SCP没有密钥生成程序。它捆绑了 PuTTY 中的 PuTTYgen。
为了完整性:
- OpenSSH(
ssh
,ssh-keygen
)以 OpenSSL 使用的“PEM”格式存储私钥,以自己的单行格式存储公钥。(如上所述,“私钥”文件包含私钥和公钥。)
他们告诉我,有效的 DSA 密钥末尾必须有“用户名@系统名称”。
[...] 如果我在文本末尾添加 useraccount@systemname ,它会起作用吗?Linux 系统如何验证我的系统名为“systemname”?如果无法验证,添加它的目的是什么?
该username@systemname
部件是评论用于密钥识别(例如,当您有 10 把密钥时,授权密钥), 但是被软件完全忽略。
没有注释的 OpenSSH 公钥完全有效。
答案2
您需要以第三方 SFTP 服务器可以识别的格式提供密钥对的公共部分 - 在这种情况下,他们似乎想要 openssh 格式。
我不是 CoreFTP Lite dsa 密钥格式的专家,但从一些随机的谷歌搜索结果来看,你似乎可以使用PuttyGen打开CoreFTP生成的密钥,然后将其导出为OpenSSH公钥。