如何在 NodeJS 中使用 ASC 文件和 username/password 通过 SFTP 上传文件
How to upload a file with SFTP using an ASC file and username/password in NodeJS
我一直在执行一项任务,使用合作伙伴发送给我的 asc 文件中的 public PGP 密钥将文件上传到合作伙伴的 ftp 站点。
该文件看起来像这样(删除了大部分密钥):
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGP Desktop 10.2.1 (Build 4461)
mQEN... ... ...=K8zL
-----END PGP PUBLIC KEY BLOCK-----
我已经尝试了几个 SFTP 节点包,但似乎还没有任何效果。大多数示例使用 .rsa 文件,但我只提供了这个 .asc 文件。从我的研究中,我可以看到有些人使用过带有此扩展名的文件,但没有人完全解释如何使用。
我能够使用 Filezilla 连接到 FTP 站点并收到一条消息,指出主机密钥算法是 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.
事实证明,SFTP 连接本身不需要 ASC 文件,而是仅用于在发送前加密文件。我能够使用节点包 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');
});
我一直在执行一项任务,使用合作伙伴发送给我的 asc 文件中的 public PGP 密钥将文件上传到合作伙伴的 ftp 站点。 该文件看起来像这样(删除了大部分密钥):
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGP Desktop 10.2.1 (Build 4461)
mQEN... ... ...=K8zL
-----END PGP PUBLIC KEY BLOCK-----
我已经尝试了几个 SFTP 节点包,但似乎还没有任何效果。大多数示例使用 .rsa 文件,但我只提供了这个 .asc 文件。从我的研究中,我可以看到有些人使用过带有此扩展名的文件,但没有人完全解释如何使用。
我能够使用 Filezilla 连接到 FTP 站点并收到一条消息,指出主机密钥算法是 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.
事实证明,SFTP 连接本身不需要 ASC 文件,而是仅用于在发送前加密文件。我能够使用节点包 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');
});