Доступ к SFTP из NodeJS

У меня есть необходимость, где я должен открыть соединение SFTP с сервером, скопировать файл оттуда на локальный.

С этой целью я попытался установить модуль node-sftp, используя

npm install node-sftp

Это не сработало из коробки, мне пришлось заменить файл sftp.js, который был установлен npm, на файл из репозитория github: https://github.com/ajaxorg/node-sftp

(Версия npm использовала TTY, а версия github использовала PTY. Я не уверен, что они есть)

После запуска сервера и вызова кода, я вижу это в консоли.

launching: sftp -o Port=22 jash@xxx.63.xxx.49
listening...

консоль тут просто висит. Я пытаюсь распечатать все файлы в текущем каталоге после открытия соединения.

Это код

var http = require('http');
var Sftp = require('node-sftp');
var port = process.env.PORT || 1337;
var msgHandler = function(request, response) {
    var options = {
        host:"xxx.63.xxx.49",
        username:"jash",
        password:"mypassword",
        port:22
    };
    var conn = new Sftp(options,function(err){
       console.log(err);
    });
    conn.cd(".", function(err) {
        console.log(err);
        conn.ls(".", function(err, res) {
            console.log(res[0].path);
        });
    });
    console.log("listening...");
}

http.createServer(msgHandler).listen(port);

Учетные данные в порядке, я использовал их в SecureCRT и смог войти в систему.

2 ответа

Второй аргумент Sftp() (function(err)...) где вы хотите разместить свой conn.cd(... код. Это (второй аргумент) - это функция, которая вызывается после установления соединения. Обязательно проверьте наличие err конечно.

Вам нужно использоватьexec()метод после команд.

      conn
  .cd(".")
  .ls()
  .exec(
    function(err, res) { 
      console.log(res.data)
    }
  );
Другие вопросы по тегам