【问题标题】:Connect to an SFTP server连接到 SFTP 服务器
【发布时间】:2021-07-26 23:42:07
【问题描述】:

我正在尝试在 AWS 上设置 SFTP 服务器。

我使用ssh2-sftp-client 作为客户端连接到我在 AWS 上的服务器。 我在连接到本地服务器之前尝试过这个并且工作成功,现在唯一的区别是我尝试使用 ppk 而不是密码。

我使用 PuttyGen 将我的 pub-key 转换为 ppk,但仍然不喜欢它。

这是我的连接的样子:

        await sftp.connect({
            host: process.env.SFTP_HOST,
            port: process.env.SFTP_PORT,
            username: process.env.SFTP_USERNAME,
            privateKey: fs.readFileSync('./transfer_key.ppk')
        })

这是我得到的错误:

 Error: ENOENT: no such file or directory, open './transfer_key.ppk'

知道如何以这种方式连接到 AWS 传输吗?

谢谢

【问题讨论】:

  • 你检查过那个文件真的是否存在吗?另外,请使用适当的标记 - 通过编辑将您正在使用的编程语言添加到您的问题中
  • 是的,文件确实存在
  • 我也用 Filezilla 来检查连接,出现类似错误 FATAL ERROR: Received unexpected end-of-file from SFTP server
  • 请编辑您的问题以包含所有详细信息。如果您也无法使用 Filezilla 连接到该服务器,这对我来说似乎是服务器的问题 - 您无法在脚本中解决任何问题
  • 错误信息暗示密钥文件不在程序正在查找的目录中,或者您可能拼错了文件名。尝试将密钥文件名指定为完整的绝对路径,而不是相对路径。

标签: node.js amazon-web-services sftp


【解决方案1】:

错误信息暗示它找不到文件,但也许它意味着它找不到有效文件?我认为您的问题可能是 PuttyGen 创建的 .ppk 文件是错误类型的密钥文件。客户端需要“OpenSSH 格式”的私钥,ppk 文件仅用于 Windows 应用程序,如 putty/pageant/winscp afaik。

尝试将您的 .ppk 加载到 puttygen,确保已设置密码,然后使用转换菜单 --> 导出 OpenSSH 密钥选项。这将创建一个新的文本文件,其中包含一个标题行、您的编码私钥和一个在文本编辑器中查看时看起来像这样(只是更长)的页脚:

-----BEGIN RSA PRIVATE KEY-----
MIIEoQIBDIKCAQEAmnsdLEsp2hkdz+kVoCuL6JYiu5t/jUZCeaQc8TRyEeLUsk2H
0wMA8azMyzt+a1JcNa2j+jrE5Fd6UiJ7do6OQFgqLxv48QCpwNximS20yavKNCGs
5HCsP4feVq2/2/IaCMNLEcv2XBweipYyY0ME+w1wSojWwCetMw==
-----END RSA PRIVATE KEY-----

【讨论】:

  • 感谢您的回答。所以我也试过了,但就像文件夹中不存在该文件一样。我要求它尝试找到路径但不存在。如果我不能让它工作,你知道我在哪里可以找到不需要文件的 sftp 服务器吗?
  • 您使用的库支持用户名/密码 - 您不必使用密钥文件 - 您只受 sftp 服务器上可用的身份验证方法的限制。我个人建议您坚持使用基于密钥的身份验证 - 它比密码更安全。尝试添加一些调试代码,使用fs.readdir 列出目录中的所有文件并输出它们。然后您可以确认密钥文件是否存在、是否正确命名等。发布输出。 *.com/questions/2727167/…