0

我正在尝试从机密管理器中检索 ppk 文件的内容并使用它来连接到 SFTP。

如果我将文件存储在本地并传递文件,我可以轻松地做到这一点。

const sshConfig = { //This works
    host: 'host',
    port: 22,
    username: 'username',
    passphrase:'passphrase',
    privateKey: fs.readFileSync(ppkFile.ppk),
    readyTimeout: 99999,
};

如果我尝试传递存储在 AWS SecretsManager 中的 ppk 文件的内容,它将不起作用。

const sshConfig = { //This doesn't work
    host: 'host',
    port: 22,
    username: 'username',
    passphrase:'passphrase',
    privateKey: fs.readFileSync('file contents retrieved as a string from secretsmanager'),
    readyTimeout: 99999,
};

我之前也尝试过将从 AWS SecretsManager 返回的字符串转换为缓冲区,而不是使用 fs.readFileSync 但这不起作用。

const sshConfig = { //This doesn't work
    host: 'host',
    port: 22,
    username: 'username',
    passphrase:'passphrase',
    privateKey: Buffer.from('file contents retrieved as a string from secretsmanager'),
    readyTimeout: 99999,
};

可以这样做吗?如果可以,有人可以帮我做对吗?

4

1 回答 1

0

如果您使用 lambda 函数,则不能直接传递文件名。您可以将文件存储在 s3 存储桶中,并且可以将 url 传递给请求 url 函数,一旦从该函数获取字符串,将该字符串转换为缓冲区并作为私钥传递。

let Client = require("ssh2-sftp-client");
let fs = require("fs")
var request = require('request');

//var path = require('path');

function getFile(){
    return new Promise(function(resolve,reject){

    request.get('https://test.com/private.ppk', function (error, response, body) {
    if (!error && response.statusCode == 200) {
        var csv = body;
        // Continue with your processing here.
        console.log("data",csv)
        resolve(csv)
    }
});
    })
}
  function uploadToFtp() {
      
        return new Promise(async (resolve, reject) => {
          const c = new Client();
          const file = await getFile()
          c.connect({
            host: "host",
            port: '22',
            user: "root",
            password : "root>",
            privateKey:  Buffer.from(file),
            passphrase: 'abcd1234'
          }).then(()=>{
            console.log("FTP CONNECTED")
            resolve('')
        }).catch((err)=>{
            
            console.log(`funcName:Shared uploadToFtp ---> ${err.message}`)
            reject('')
        })

         
        })

  }

于 2021-02-23T09:56:27.417 回答