ssh2-sftp-client get()请求提供“拒绝权限-错误”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ssh2-sftp-client get()请求提供“拒绝权限-错误”相关的知识,希望对你有一定的参考价值。
我正在电子应用程序中使用此代码连接到需要收集一些数据的sftp服务器。我在列出/ out文件夹中的文件时没有问题,但是无法获取带有“已定义权限”错误的sftp文件。理想情况下,我希望能够使用get()文件并直接在函数中访问文本数据而无需存储到文件中。
let Client = require('ssh2-sftp-client');
let sftp = new Client();
var root = '/out';
var today = new Date();
var mon = ((today.getMonth()+1) < 10)? "0" + (today.getMonth()+1) : (today.getMonth()+1);
var date = (today.getDate() < 10)? "0" + today.getDate() : today.getDate();
var fileDate = mon + date;
sftp.connect(
host: '<server-address>',
port: 2222,
username: 'XXXXXXXX',
password: 'xxxxxxxx',
privateKey: fs.readFileSync(path.join(__dirname, '../rsa/<file-name-here>.pem'))
)
.then(() =>
return sftp.list(root, 'SN5M' + fileDate);
)
.then((fileInfo) =>
if (fileInfo)
var filePath = root + '/' + fileInfo[fileInfo.length - 1].name;
return sftp.get(filePath).then((file) =>
console.log(file);
event.returnValue = file;
sftp.end();
)
.catch((err) =>
console.log('File get error', err);
event.returnValue = err;
sftp.end();
);
)
.catch((err) =>
console.log('File info error', err);
event.returnValue = err;
sftp.end();
);
尝试一下,看看是否有效
'get'返回(String | Stream | Buffer)。
let dst = fs.createWriteStream('/local/file/path/data.txt');
sftp.get(filePath,dst)
参考https://www.npmjs.com/package/ssh2-sftp-client#orga0dfcd5
查看您的代码,您有两个问题。
如果仅使用1个参数调用get(),它将返回一个缓冲区,而不是文件。要获取文件,只需执行
client.get(sourceFilePath,localFilePath)
并且文件将在本地另存为localFilePath
。这两个参数都是字符串,需要为完整路径,即包括文件名,而不仅仅是目录。第二个参数的文件名可以与第一个不同。但是,如果只想检索文件,则最好使用fastGet()
,而不要使用get()
。 get()方法非常适合您想在代码中使用数据做一些事情,例如缓冲区或写流管道/处理。 fastGet()方法比get()更快,因为它使用并发进程进行传输,但不允许使用缓冲区或流进行进一步处理。
- 您看到的错误消息是由于调用get()的方式引起的,或者表明您没有权限读取您尝试访问的文件(与您连接的用户)。最简单的检查方法是使用openSSH sftp程序(在Linux,mac和Windows上可用)和使用的密钥(使用-i开关)尝试下载文件。如果它因权限错误而失败,那么您就知道这是一个权限错误,而不是您的代码或ssh2-sftp-client模块的问题。
编辑:我刚刚注意到您也同时使用了密码和密钥文件。您不需要两者-两者都可以,但是您不需要两者都用。我倾向于尽可能使用密钥文件,因为这样可以避免将密码存储在某个地方。确保不要在密钥中添加密码。另外,您可以使用dotenv
模块之类的东西,并将您的凭据和其他配置存储在.env文件中,而不将其签入版本控制。
以上是关于ssh2-sftp-client get()请求提供“拒绝权限-错误”的主要内容,如果未能解决你的问题,请参考以下文章
python测试开发django-24.表单提交之get请求