提问人:F H 提问时间:4/5/2023 最后编辑:F H 更新时间:4/5/2023 访问量:90
来自 SAP BTP NodeJS 的 SFTP 问题
SFTP issue from SAP BTP NodeJS
问:
我正在尝试使用以下类从 SFTP 位置读取文件:
SFTPClient.js:
let Client = require('ssh2-sftp-client');
class SFTPClient {
constructor() {
this.client = new Client();
}
async connect(options) {
console.log(`Connecting to ${options.host}:${options.port}`);
try {
await this.client.connect(options);
} catch (err) {
console.log('Failed to connect:', err);
}
}
async disconnect() {
await this.client.end();
}
async listFiles(remoteDir, fileGlob, res) {
console.log(`Listing ${remoteDir} ...`);
let fileObjects;
try {
fileObjects = await this.client.list(remoteDir, fileGlob);
} catch (err) {
console.log('Listing failed:', err);
res.write('Listing failed:'+ err);
}
return fileObjects;
}
通过以下代码启动与公共演示 SFTP 的连接: 帮助程序.js:
const SFTPClient =require('./SFTPClient');
async function connectToDemoSFTP(){
const parsedURL = new URL("sftp://test.rebex.net:22");
const port = parsedURL.port;
const { host, username, password } = {"host":"test.rebex.net", "username":"demo", "password":"password"};
//* Open the connection
const client = new SFTPClient();
await client.connect({ host, port, username, password });
return client;
}
module.exports = {connectToDemoSFTP};
索引.js:
const { connectToDemoSFTP } = require('./utils/Helper');
let app = new express();
console.log(`Env port is ${process.env.PORT}`);
let port = process.env.PORT || 3000;
app.listen(port);
app.get('/nodejsapi/get/files', async (req, res) => {
{
let client = await connectToDemoSFTP();
client.listFiles("./pub/example", undefined, res);
....
}
当我从 vscode 本地运行它时,我能够使用 expressjs get call 连接到 SFTP,它列出了 SFTP 服务器(来自 pub/example 文件夹)中的文件。它在试用BTP帐户中也可以正常工作。我没有在我的试用帐户中进行任何额外的配置以使其正常运行......
但是,当我在生产性 BTP 帐户中部署和测试它时,连接不成功。它在行失败: let client = await connectToDemoSFTP();
我想知道它在我的试用 BTP 帐户中是如何工作的,以及生产性 SAP BTP 帐户 w.r.to 这里出了什么问题!!有人可以帮忙吗..
我可以在 BTP 中看到 nodejs 应用程序的以下日志:
标准输出 [应用程序/程序/网络/0] 连接失败:错误:连接:getConnection:等待握手时超时 [应用程序/程序/网络/0] 在 SftpClient.fmtError (/home/vcap/app/node_modules/ssh2-sftp-client/src/index.js:111:22)
标准输出 [应用程序/程序/网络/0] 在 SftpClient.connect (/home/vcap/app/node_modules/ssh2-sftp-client/src/index.js:249:37)
标准输出 [应用程序/程序/网络/0] 在 process.processTicksAndRejections (node:internal/process/task_queues:95:5)
标准输出 [应用程序/程序/网络/0] 在异步 SFTPClient.connect (/home/vcap/app/utils/SFTPClient.js:10:9)
标准输出 [应用程序/程序/网络/0] 在异步连接到演示SFTP (/home/vcap/app/utils/Helper.js:8:5)
标准输出 [应用程序/程序/网络/0] 在异步 /home/vcap/app/index.js:64:22 {
标准输出 [应用程序/程序/网络/0] 代码: 'ERR_GENERIC_CLIENT',
标准输出 [应用程序/程序/网络/0] 自定义:true
标准输出 [应用程序/程序/网络/0] }
标准输出 [应用程序/程序/网络/0] 清单 ./pub/example ...
标准输出 [应用程序/程序/网络/0] 连接到 test.rebex.net:22
问候
时尚..
答: 暂无答案
评论