Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ssh2模块在node.js中设置sftp服务器_Node.js_Sftp - Fatal编程技术网

使用ssh2模块在node.js中设置sftp服务器

使用ssh2模块在node.js中设置sftp服务器,node.js,sftp,Node.js,Sftp,我想使用node.js设置一个sftp服务器 我查看了这个模块,似乎非常适合启动sftp服务器 我也查看了,但我无法找到如何向我的服务器验证用户的选项,如果您想创建一个也处理身份验证和所有事情的sftp服务器(而不仅仅是作为OpenSSH服务器子系统的sftp服务器),那么哪个目录将是sftp的根目录,您还需要对ssh2服务器部分进行编码。下面是一个仅允许密码验证和仅启动sftp会话的简单示例: var fs = require('fs'); var ssh2 = require('ssh2')

我想使用node.js设置一个sftp服务器

我查看了这个模块,似乎非常适合启动sftp服务器


我也查看了,但我无法找到如何向我的服务器验证用户的选项,如果您想创建一个也处理身份验证和所有事情的sftp服务器(而不仅仅是作为OpenSSH服务器子系统的sftp服务器),那么哪个目录将是sftp的根目录,您还需要对ssh2服务器部分进行编码。下面是一个仅允许密码验证和仅启动sftp会话的简单示例:

var fs = require('fs');
var ssh2 = require('ssh2'),
    Server = ssh2.Server;
var OPEN_MODE = ssh2.SFTP_OPEN_MODE,
    STATUS_CODE = ssh2.SFTP_STATUS_CODE;

new Server({
  privateKey: fs.readFileSync('host.key')
}, function(client) {
  console.log('Client connected!');

  client.on('authentication', function(ctx) {
    if (ctx.method === 'password'
        && ctx.username === 'foo'
        && ctx.password === 'bar')
      ctx.accept();
    else
      ctx.reject();
  }).on('ready', function() {
    console.log('Client authenticated!');

    client.on('session', function(accept, reject) {
      var session = accept();
      session.on('sftp', function(accept, reject) {
        console.log('Client SFTP session');
        var openFiles = {};
        var handleCount = 0;
        // `sftpStream` is an `SFTPStream` instance in server mode
        var sftpStream = accept();
        sftpStream.on('OPEN', function(reqid, filename, flags, attrs) {
          // only allow opening /tmp/foo.txt for writing
          if (filename !== '/tmp/foo.txt' || !(flags & OPEN_MODE.WRITE))
            return sftpStream.status(reqid, STATUS_CODE.FAILURE);
          // create a fake handle to return to the client, this could easily
          // be a real file descriptor number for example if actually opening
          // the file on the disk
          var handle = new Buffer(4);
          openFiles[handleCount] = true;
          handle.writeUInt32BE(handleCount++, 0, true);
          sftpStream.handle(reqid, handle);
          console.log('Opening file for write')
        }).on('WRITE', function(reqid, handle, offset, data) {
          if (handle.length !== 4 || !openFiles[handle.readUInt32BE(0, true)])
            return sftpStream.status(reqid, STATUS_CODE.FAILURE);
          // fake the write
          sftpStream.status(reqid, STATUS_CODE.OK);
          var inspected = require('util').inspect(data);
          console.log('Write to file at offset %d: %s', offset, inspected);
        }).on('CLOSE', function(reqid, handle) {
          var fnum;
          if (handle.length !== 4 || !openFiles[(fnum = handle.readUInt32BE(0, true))])
            return sftpStream.status(reqid, STATUS_CODE.FAILURE);
          delete openFiles[fnum];
          sftpStream.status(reqid, STATUS_CODE.OK);
          console.log('Closing file');
        });
      });
    });
  }).on('end', function() {
    console.log('Client disconnected');
  });
}).listen(0, '127.0.0.1', function() {
  console.log('Listening on port ' + this.address().port);
});