标签: ssh2-sftp

ssh2节点js sftp协议错误握手失败

你好,我有一个小问题,我开发了一个带有节点js的脚本sftp客户端,它连接到sftp服务器并抓取一些文件,我用本地服务器测试了它的工作,但是当我尝试将它与生产服务器一起使用时,我收到了这个错误 :

错误:握手失败:没有匹配的密钥交换算法

我已经使用生成了 rsa 密钥ssh-keygen

这是脚本的相关部分:

var Client = require('ssh2').Client;
var fs = require('fs');
var path = require('path');

var args = process.argv.slice(2);

var connSettings = {
    host: args[0] || '127.0.0.1',
    port: args[1] || 22,
    username: args[2] || 'karim',
    password: args[3] || 'karimos',
    algorithms: {
        hmac: ['hmac-sha2-256', 'hmac-sha2-512', 'hmac-sha1', 'hmac-sha1-96']
    }

};
Run Code Online (Sandbox Code Playgroud)

javascript ssh node.js ssh2-sftp

9
推荐指数
2
解决办法
1万
查看次数

sftp 因“消息太长”错误而失败

我的 java 程序使用 ssh/sftp 将文件传输到 linux 机器(显然......),而我这样做的库是 JSch(尽管这不是罪魁祸首)。

现在,其中一些 linux 机器具有 shell 登录启动脚本,这可悲地导致 ssh/sftp 连接失败,并显示以下消息

收到的消息太长 1349281116

在简要阅读之后,这显然是一个已知的 ssh 设计问题(不是错误 -请参阅此处)。并且所有建议的解决方案都在 ssh 服务器端(即禁用在 shell 登录期间输出消息的脚本)。

我的问题 - 是否可以选择在客户端避免此问题?

ssh sftp jsch ssh2-sftp

6
推荐指数
1
解决办法
1万
查看次数

PHP 7 SSH2.SFTP stat()bug解决了

我有一个使用SFTP连接下载文件的应用程序.它在PHP 5.6中正常工作,而不是在PHP 7中工作.我得到的错误如下:

PHP警告:filesize():ssh2.sftp的stat失败...

我的代码如下:

 public function retrieveFiles($downloadTargetFolder,$remoteFolder = '.') {

            $fileCount = 0;

                echo "\nSftpFetcher retrieveFiles\n";

        $con = ssh2_connect($this->host,$this->port) or die("Couldn't connect\n");
        if($this->pubKeyFile){
                $isAuth = ssh2_auth_pubkey_file($con, $this->user, $this->pubKeyFile, $this->privKeyFile);
        } else {
                $isAuth = ssh2_auth_password($con,  $this->user,  $this->pass);
        };


        if ($isAuth) {

                $sftp = ssh2_sftp($con);
                $rd = "ssh2.sftp://{$sftp}{$remoteFolder}";

                if (!$dir = opendir($rd)) {
                        echo "\nCould not open the remote directory\n";
                } else {
                        $files = array();
                                while (false != ($file = readdir($dir))) {
                                    if ($file == "." || $file == …
Run Code Online (Sandbox Code Playgroud)

ssh2-sftp php-7

5
推荐指数
1
解决办法
2319
查看次数

为从ssh2-sftp-client的缓冲区中上传的文件分配名称?

我在通过ssh2-sftp-client(https://www.npmjs.com/package/ssh2-sftp-client)从缓冲区上传文件时遇到困难,我正在使用Multer来上传文件,定位req.file.buffer访问要通过sftp客户端上传的数据,如下所示:

sftp.connect({
host: 'some.IP.address.here',
port: '22',
username: 'username',
password: 'password'
})
.then(() => {
return sftp.put(req.file.buffer, '/var/www/bucket', false);
})
.catch((err) => {
console.log(err, 'catch error');
});
Run Code Online (Sandbox Code Playgroud)

我不知道如何为存储在req.file.originalname Multer对象中的上载文件分配名称。

顺便说一句,ssh2-sftp-client返回以下错误:

Error: Failure image.routes.js:39 code:4 lang:"" message:"Failure" stack:"Error: Failure\n at SFTPStream._transform (/Users/petrfila/Apps/lifeIQ/liq-api/node_modules/ssh2-streams/lib/sftp.js:410:27)\n at SFTPStream.Transform._read (_stream_transform.js:185:10)\n at SFTPStream._read (/Users/petrfila/Apps/lifeIQ/liq-api/node_modules/ssh2-streams/lib/sftp.js:181:15)\n at SFTPStream.Transform._write (_stream_transform.js:173:12)\n at doWrite (_stream_writable.js:406:12)\n at writeOrBuffer (_stream_writable.js:392:5)\n at SFTPStream.Writable.write (_stream_writable.js:290:11)\n at Channel.ondata (_stream_readable.js:646:20)\n at Channel.emit (events.js:127:13)\n at addChunk (_stream_readable.js:269:12)\n at readableAddChunk (_stream_readable.js:256:11)\n at Channel.Readable.push (_stream_readable.js:213:10)\n at SSH2Stream.<anonymous> …

javascript node.js ssh2-sftp

5
推荐指数
1
解决办法
350
查看次数

Query a remote server's operating system

我正在用 Node.js 编写一个微服务,它运行一个特定的命令行操作来获取特定的信息。该服务在多个服务器上运行,其中一些在 Linux 上,一些在 Windows 上。我正在使用ssh2-exec连接到服务器并执行命令,但是,我需要一种方法来确定服务器的操作系统以运行正确的命令。

let ssh2Connect = require('ssh2-connect');
let ssh2Exec = require('ssh2-exec');

ssh2Connect(config, function(error, connection) {
    let process = ssh2Exec({
        cmd: '<CHANGE THE COMMAND BASED ON OS>',
        ssh: connection
    });
    //using the results of process...
});
Run Code Online (Sandbox Code Playgroud)

我有一个解决方案的想法:按照这个问题,预先运行一些其他命令,并从所述命令的输出中确定操作系统;但是,我想了解是否有更“正式”的方式来实现这一点,特别是使用SSH2库。

ssh shell node.js ssh2-sftp ssh2-exec

5
推荐指数
1
解决办法
146
查看次数

SSH2 for PHP7 MacOS?

尝试使用时

ssh2_sftp($this->con);
Run Code Online (Sandbox Code Playgroud)

PHP 7.1.7认为Im正在类中寻找函数。经过一番阅读后,我发现需要从PECL(http://php.net/manual/en/wrappers.ssh2.php)安装SSH2。

当我这样做时,出现以下错误:

pecl/ssh2 requires PHP (version >= 4.0.0, version <= 6.0.0), installed version is 7.1.7
No valid packages found
install failed
Run Code Online (Sandbox Code Playgroud)

任何人都对如何使其在PHP 7.1.7的MacOs 10.13.3(17D47)上运行有任何想法?提前致谢!

macos ssh pecl ssh2-sftp php-7.1

4
推荐指数
3
解决办法
4082
查看次数

使用 Lambda(节点)将图像从 SFTP 复制到 S3

我正在使用“ssh2-sftp-client”来完成这项工作。因此,如果我先将文件复制到 Lambda 的 /tmp/ 文件夹,然后将其上传到 s3,则基本上它可以正常工作。我想将读取流指向 s3 而不保存在 lambda /tmp/ 文件夹中。

所以基本上:

let sftp = new Client();
sftp.connect({
    host: Config.host,
    port: Config.port,
    username: Config.user,
    password: Config.password
}).then(() => {
    return sftp.list('/photos');
}).then((files) => {
    return get(files)
}).then((streams) => {
     return streamToString(streams)
}).then((dataArray) => {
    return uploadToS3.putBatch(Config,dataArray)
}).then(() => {
    return cleanSFTP();
}).then(() => {
    context.done();
}).catch((err) => {
    console.log('Catch Error: ', err);
    context.fail();
});
Run Code Online (Sandbox Code Playgroud)

从 sftp 获取读取流:

  function get(files) {
        return Promise.all(files.slice(0, 2).map((file) => {
            fileList.push(file.name);
            return sftp.get(BASIC_URL + '/' …
Run Code Online (Sandbox Code Playgroud)

sftp amazon-s3 node.js ssh2-sftp aws-lambda

4
推荐指数
1
解决办法
6569
查看次数

无法在同一类 JS 的另一个方法中调用方法

我试图在同一个类的方法连接中调用方法测试。但我得到的只是“未捕获的类型错误:无法读取未定义的属性‘test’”。如何访问 sftp 回调中的任何变量?为什么会这样?

这是我的代码:

const SSH2 = require('ssh2').Client;
class SshClient {
  constructor(host, username, password) {
    this.host = host;
    this.username = username;
    this.password = password;
    this.port = 22;
    this.client = null;
  }

  test(testvar) {
    console.log(testvar);
  }

  connect() {
    this.client = new SSH2();
    let client = this.client;
    let username = this.username;
    this.client.connect({
      host: this.host,
      port: this.port,
      username: this.username,
      password: this.password
    });
    this.client.on('ready', function() {
      console.log('Client :: ready', client);
      client.sftp(function(err, sftp) {
        if (err) throw err;
        sftp.readdir('/home/' + username, function(err, list) {
          if …
Run Code Online (Sandbox Code Playgroud)

javascript oop node.js ssh2-sftp

3
推荐指数
1
解决办法
8223
查看次数

连接到 sftp.webtrends.com 时没有匹配的主机密钥

我正在尝试使用 Firebase Cloud Functions 将文件发送到 webtrends ftp 服务器,但遇到了无法解决的问题。由于我使用 Firebase Cloud Functions,我的函数是从 Nodejs 服务器运行的。我正在使用这个 npm 包:https://www.npmjs.com/package/ssh2-sftp-client

在线阅读并解释调试日志后,我了解到问题是服务器使用了已弃用的加密算法(ssh-dss)。我在这里读到https://www.openssh.com/legacy.html ssh-dss 是遗留的,因此不受 ssh2 支持。

我发现的大多数其他解决方案都告诉我配置 ssh 配置,但在这种情况下我无权访问远程并且无法配置它。

这是我用来连接的代码:

const Client = require('ssh2-sftp-client');
const sftp = new Client();
sftp.connect({
  host: 'sftp.webtrends.com',
  port: '****', // omitted
  username: '****', // omitted
  password: '****', // omitted
  algorithms: {
    serverHostKeys: ['ssh-dss'],
  },
});
Run Code Online (Sandbox Code Playgroud)

这是调试日志:

DEBUG: Local ident: 'SSH-2.0-ssh2js0.1.20'
DEBUG: Client: Trying sftp.webtrends.com on port **** ...
DEBUG: Client: Connected
DEBUG: Parser: IN_INIT
DEBUG: Parser: IN_GREETING
DEBUG: …
Run Code Online (Sandbox Code Playgroud)

sftp node.js firebase ssh2-sftp google-cloud-functions

3
推荐指数
1
解决办法
3743
查看次数

SSH2无法在新服务器上运行

我们已经更改了托管公司,ssh2工作的地方已经不再适用了.我们已ssh2启用新服务器并已allow_url_fopen启用.

我能看到的唯一区别是使用的旧服务器PHP 5.4.45和新服务器正在使用PHP 5.6.28.

但是,我现在得到以下错误. Could not open remote file: ssh2.sftp://Resource id #337/my/directory/file.txt

这是我的代码示例:

$remote_host = "myhostinfohere";
$remote_port = 22;
$remote_user = "myuser";
$remote_pass = "mypassword";
$remote_dir = "/my/directory/";
$remote_file = 'file.txt';

try {
    $remote_conn = ssh2_connect($remote_host, $remote_port);    
} catch (Exception $e) {
    die("could not connect to ".$remote_host);
}

try {
    ssh2_auth_password($remote_conn, $remote_user, $remote_pass);
} catch (Exception $e) {
    die("Password failed on ".$remote_host);
}

$sftp = ssh2_sftp($remote_conn);

$fetch_string = "ssh2.sftp://$sftp" . $remote_dir …
Run Code Online (Sandbox Code Playgroud)

php libssh2 ssh2-sftp

2
推荐指数
1
解决办法
2959
查看次数

NodeJS:从 sftp 服务器读取 csv 文件并将其转换为 JSON

我正在使用 ssh2-sftp-client 读取 CSV 文件并创建一个 ReadableStream。然后我试图在库 csvtojson 的帮助下将此 readableStream 转换为 Json。但是,我总是收到以下错误:

类型错误:readStream.pipe 不是函数

到目前为止,这是我的代码:

let Client = require('ssh2-sftp-client');
let sftp = new Client();
var csv = require("csvtojson");

sftp.connect({
    host: 'HOST',
    port: 'PORT',
    username: 'USERNAME',
    password: 'PASSWORD'
}).then(() => {
    return sftp.get('/home/user/etc/testfile.csv');
}).then((data) => {
    csv()
        .fromStream(data)
        .subscribe(function (jsonObj) { //single json object will be emitted for each csv line
            // parse each json asynchronousely
            return new Promise(function (resolve, reject) {
                resolve()
                console.log(jsonObj);
            })
        })

}).catch((err) => {
    console.log(err, 'catch error'); …
Run Code Online (Sandbox Code Playgroud)

sftp node.js ssh2-sftp

1
推荐指数
1
解决办法
2237
查看次数