Node.js nodejs ssh2身份验证失败
我试图使用nodejs的ssh2库从远程服务器获取文件。对于用户“xyz”,我的代码似乎工作得很好。但是,实际用户的格式为“abc\xyz”,其中abc为域,xyz为实际用户。当我与用户一起运行与“abc\xyz”相同的代码时,我不断得到错误: “sftp错误:{[error All configured authentication methods failed]级别:'客户端身份验证'}” 我可以使用此用户作为“xyz\abc”@hostname手动创建ssh,但由于某些原因,这在代码中失败。我错过什么了吗 由于某些限制,此处无法提供准确的代码,但以下是在进行必要更改以屏蔽变量后的相关代码:Node.js nodejs ssh2身份验证失败,node.js,sftp,libssh2,Node.js,Sftp,Libssh2,我试图使用nodejs的ssh2库从远程服务器获取文件。对于用户“xyz”,我的代码似乎工作得很好。但是,实际用户的格式为“abc\xyz”,其中abc为域,xyz为实际用户。当我与用户一起运行与“abc\xyz”相同的代码时,我不断得到错误: “sftp错误:{[error All configured authentication methods failed]级别:'客户端身份验证'}” 我可以使用此用户作为“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); }
});
}
可能您忘记了在用户名字符串中使用双反斜杠,以防止使用反斜杠作为转义特殊字符标记,希望下面的内容能给您一些想法。。。 我阅读了ssh2和ssh2streams api参考,并使用以下解决方案解决了问题 注意如果出现如下错误:句柄不是缓冲区。这可能意味着该文件不存在,或者您没有访问该文件的权限 如果您有任何问题,请告诉我:)
你能展示一些相关的代码吗?这很难理解。代码很难在注释中格式化,因为注释不是为冗长的内容而设计的。只需编辑您的问题并将代码放在那里。谢谢为了澄清,它确实正确地获取了username的值(日志部分):username被选择为abc\xyz。另外,我尝试了不同的组合,比如将用户名命名为“abc\xyz”,这样传递给sftp接口的实际用户名就是“abc\xyz”。实际上,让我重新表述我的问题。我们对在ssh2库中使用用户名中的“\”字符有限制吗?没有,对用户名没有人为的限制。可能OpenSSH客户端正在使用普通密码身份验证方法以外的其他方法进行身份验证(例如,使用来自磁盘或ssh代理实例的本地私钥,或使用
键盘交互
)。通过打开OpenSSH客户端中的调试,您可能会发现是哪种情况。
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'
});
}