2015-05-18 77 views
0

我想使用ssh2库nodejs从远程服务器获取文件。我的代码似乎对用户“xyz”正常工作。但是,实际用户的格式为“abc \ xyz”,其中abc是域,xyz是实际用户。当我运行与用户相同的代码为“abc \ xyz”时,我不断收到错误: “sftp error:{[ERROR All configured authentication methods failed] level:'client-authentication'}”nodejs ssh2身份验证失败

我是能够手动使用这个用户作为“xyz \ abc”@hostname的ssh,但由于某种原因,这在代码中失败。我错过了什么吗?

由于某些限制不能在这里提供确切的代码,但下面是做一些必要的修改后的相关代码,以掩盖变量:

else { 
    // Provide an SFTP interface remote files 
var conn = new ssh2(); 
    conn.on('ready', function() { 
    logger.info('sftp connection ready'); 
    conn.sftp(function(err, sftp) { 
     if(err) throw err; 
     refreshRemoteFiles(sftp); 
    }); 
    }).on('error', function(err) { 
    logger.info('some text +variable: '+variable value); 
    logger.info('some text +variable'+variable value); 
    logger.info('some text +variable'+varibale value); 
    logger.info('some text: sftp error:', err); 

    }).connect({ 
    host: hostname, 
    port: 22, 
    username: username, 
    password: password 
    // debug: function(str) { logger.debug('sftp debug: %j', str); } 
    }); 
} 
+0

您可以显示一些相关的代码? – Trott

+0

这很难遵循。代码很难在注释中进行格式化,而注释并非针对冗长的内容而设计的。只需编辑您的问题并将代码放在那里。谢谢! – Trott

+0

只是为了澄清它确实拿起用户名的价值(记录器部分): 用户名被选为abc \ xyz。另外,我尝试了不同的组合,例如将用户名设为“'abc \ xyz'”,以便传递给sftp接口的实际用户名是'abc \ xyz' –

回答

0

可能是你忘记用户名使用双反斜线字符串,以防止使用反斜线作为转义特殊字符标记

0

希望能在下面可以给你一些想法... 我读了SSH2和ssh2streams API参考,并制定出的东西用以下解决方案...

注意如果您有任何错误,如:句柄不是缓冲区。这可能意味着文件不存在或者您没有权限访问它。

让我知道如果您有任何问题:)

checkJobStatus(startPos: number, readBytes: number, callback: (error: any, result: any) => void) { 
    let conn = new Client(); 
    conn.on('ready', function() { 
     console.log('Client :: ready'); 
     conn.sftp(function(err, sftp) { 
      if (err) throw err; 
      else {       
       sftp.open("/absolute/path/to/file", "r", function(err, fd) { 
        //Define a buffer you want to send back to your parent method 
        let m_fileBuffer: Buffer = new Buffer(readBytes); 
        sftp.read(fd, m_fileBuffer, 0, readBytes, startPos, function(err, bytesRead, buffer: Buffer, position) { 
         if(err) sftp.close(fd, callback(err, undefined)); 
         else sftp.close(fd, callback(undefined, m_fileBuffer)); 
        }); 
       }); 
      } 
     }); 
    }).connect ({ 
     host: 'server ip', 
     port: 22, 
     username: 'username', 
     password: 'password' 
    }); 
}