我正在尝试使用nodejs的ssh2库来从远程服务器获取文件。我的代码似乎适用于用户“xyz”。但是实际用户的格式为“abc \ xyz”,其中abc是域,xyz是实际用户。当我与用户运行相同的代码为“abc \ xyz”时,我不断收到错误: “sftp错误:{[错误所有已配置的身份验证方法失败]级别:'client-authentication'}”
我能够使用此用户手动将ssh用作“xyz \ abc”@hostname,但由于某种原因,这在代码中失败了。我错过了什么吗?
由于某些限制无法在此处提供确切的代码,但以下是在进行必要的更改以掩盖变量之后的相关代码:
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 :(得分:0)
可能你忘了在用户名字符串中使用双反斜杠来防止使用反斜杠作为转义特殊字符标记
答案 1 :(得分: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'
});
}