Загрузите файл, используя ssh с simple-ssh npm - PullRequest
0 голосов
/ 26 марта 2019

Мне нужно скачать файл на сервере с помощью ssh с удаленного на локальный. Я использую модуль simple-ssh из npm ссылка на модуль npm

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

var SSH = require('simple-ssh');
let ssh = new SSH({
                host: 'remote_server_ip',
                user: 'my_user',
                pass: 'my_pass'
            });
            
            ssh.exec(`cat > ${filePath}`, {
                in: fs.readFileSync('/home/raphael/Documentos/teste.bin')
            }).start();
            
            //my filePath /arq_soa/arquivos_validador/Envio/tst_acesso

Может ли кто-нибудь мне помочь? Я потерялся

После помощи @Carlos Jafet Neto мой код изменился, теперь:

var Client = require('ssh2-sftp-client');
let sftp = new Client
            sftp.connect({
                host: 'remote_server_iṕ',
                port: 22,
                username: 'username',
                password: 'password'
            }).then(() => {
                return sftp.list(`${pathArquivoValidador}`);
            }).then(async (data) => {
                let len = data.length;
                await data.forEach(x => {
                    let remoteFilePath = `${pathArquivoValidador}` + params.nmArquivo;                    
                    sftp.get(remoteFilePath).then((stream) => {
                        let file = './home/raphael/Documentos/' + params.nmArquivo;
                        fs.writeFile(file, stream, (err) => {
                            if (err) console.log(err);
                        });
                    });
                    // console.log(x);
                });
            }).catch((err) => {
                console.log(err, 'catch error');
            });

но sftp.get приносит мне следующую ошибку

{ [Error: ENOENT: no such file or directory, open './home/raphael/Documentos/tst_acesso'] errno: -2, code: 'ENOENT', syscall: 'open', path: './home/raphael/Documentos/tst_acesso' }

1 Ответ

1 голос
/ 26 марта 2019

Старайтесь сначала получать только файлы, которые находятся в ваших папках, без использования переменных, используя ваш путь в качестве строки для устранения ошибок.

var Client = require('ssh2-sftp-client');
let sftp = new Client
            sftp.connect({
                host: 'remote_server_iṕ',
                port: 22,
                username: 'username',
                password: 'password'
            }).then(() => {
                return sftp.list('/');
            }).then(async (files) => {
                console.log(files);
                len = files.length;
                await files.forEach(x => {
                    let remoteFilePath = '/' + x.name;
                    sftp.get(remoteFilePath).then((stream) => {
                        let file = './ftp/' + x.name;
                        fs.writeFile(file, stream, (err) => {
                            if (err) console.log(err);
                        });
                    });
                });
            }).catch((err) => {
                console.log(err, 'catch error');
            });

Чтобы получить один файл:

var Client = require('ssh2-sftp-client');
let sftp = new Client
            sftp.connect({
                host: 'remote_server_iṕ',
                port: 22,
                username: 'username',
                password: 'password'
            }).then(() => {
                let remoteFilePath = '/' + fileName;
                sftp.get(remoteFilePath).then((stream) => {
                    let file = './ftp/' + x.name;
                    fs.writeFile(file, stream, (err) => {
                        if (err) console.log(err);
                    });
                    sftp.end();
                });
            }).catch((err) => {
                console.log(err, 'catch error');
            });

Используйте это, чтобы закрыть соединение ftp:

sftp.end();
...