如何在NodeJS中使用ASC文件和用户名/密码通过SFTP上传文件

7

我一直在处理一个任务,使用合作伙伴发送给我的公共PGP密钥asc文件,将文件上传到他的FTP站点。 该文件如下所示(其中大部分密钥已被屏蔽):

      -----BEGIN PGP PUBLIC KEY BLOCK-----
      Version: PGP Desktop 10.2.1 (Build 4461)

      mQEN... ... ...=K8zL
      -----END PGP PUBLIC KEY BLOCK-----

我尝试了几个SFTP node包,但是似乎什么都没有奏效。大多数示例使用.rsa文件,但是我提供的只有这个.asc文件。根据我的研究,我可以看到一些人已经使用了带有此扩展名的文件,但是没有人完全解释过如何使用它们。
我能够使用Filezilla连接到FTP站点,并获得一个消息,其中hostkey算法为ssh-dss 1024,以及SHA256和MD5指纹。我不确定这是否有用。
有人有使用.asc文件建立SFTP连接的经验吗?
编辑:我尝试使用npm包sftp-upload和以下代码:
    var SftpUpload = require('sftp-upload'), fs = require('fs');
    var options = {
        host:'ftp.partnersite.com',
        username:'TempUserName',
        path: './CSV',
        remoteDir: '/',
        privateKey: fs.readFileSync('pgpkeyfile.asc'),
    },
    sftp = new SftpUpload(options);

    sftp.on('error', function(err) {
        throw err;
    })
    .on('uploading', function(progress) {
        console.log('Uploading', progress.file);
        console.log(progress.percent+'% completed');
    })
    .on('completed', function() {
        console.log('Upload Completed');
    })
    .upload();

运行代码时,我遇到了以下错误:Error: Unable to parse given privateKey value。我认为这意味着该密钥文件的格式不正确,无法用于sftp_upload。
1个回答

12

事实证明,ASC文件不是SFTP连接本身所必需的,而只用于在发送文件之前加密文件。我可以使用Node包ssh2-sftp-client连接到FTP站点,并使用以下代码上传文件:

    sftp.connect({
        host: 'ftp.site.com',
        port: '22',
        username: 'myusername',
        password: 'mypassword',
        algorithms: {
          serverHostKey: [ 'ssh-dss' ],
          kex: ['diffie-hellman-group14-sha1'],
          cipher: ['aes128-cbc']
        }
    }).then(() => {
        sftp.put('./CSV/myspreadsheet.csv', '/myspreadsheet.csv', false);
    }).then((data) => {
        console.log(data, 'the data info');
    }).catch((err) => {
        console.log(err, 'catch error');
    });

1
如果这个解决方案可以解决你的问题,那么你可能想要直接接受它。这是鼓励此类行为的地方。https://stackoverflow.com/help/self-answer - user8675309
1
非常感谢,我尝试了许多不同的sftp和ftp节点依赖项,但ssh2-sftp-client是唯一一个适用于我的。 - Lalana Chamika

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接