Доступ к 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)
}
);