来自 SAP BTP NodeJS 的 SFTP 问题

SFTP issue from SAP BTP NodeJS

提问人:F H 提问时间:4/5/2023 最后编辑:F H 更新时间:4/5/2023 访问量:90

问:

我正在尝试使用以下类从 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

问候

时尚..

节点.js sftp sap-cloud-foundry ssh2-sftp-client

评论


答: 暂无答案