【发布时间】:2015-05-18 02:49:43
【问题描述】:
我正在尝试使用 nodejs 的 ssh2 库从远程服务器获取文件。我的代码似乎适用于用户“xyz”。但是,实际用户的格式为“abc\xyz”,其中 abc 是域,xyz 是实际用户。当我与用户一起运行与“abc\xyz”相同的代码时,我不断收到错误消息: "sftp 错误: { [ERROR All configured authentication methods failed] level: 'client-authentication' }"
我可以手动使用该用户作为“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); }
});
}
【问题讨论】:
-
你能显示一些相关的代码吗?
-
这很难理解。代码很难在 cmets 中格式化,它不是为冗长的内容而设计的。只需编辑您的问题并将代码放在那里。谢谢!
-
只是为了澄清它确实正确获取了用户名的值(记录器部分):用户名被选择为 abc\xyz。另外,我尝试了不同的组合,例如将用户名指定为“'abc\xyz'”,以便传递给 sftp 接口的实际用户名是“abc\xyz”
-
实际上,让我重新表述我的问题。在 ssh2 库的用户名中使用“\”字符是否有一些限制?
-
不,对用户名没有人为限制。也许 OpenSSH 客户端正在使用普通密码身份验证方法以外的方式进行身份验证(例如,使用本地磁盘或 ssh-agent 实例的私钥,或使用
keyboard-interactive)。通过在 OpenSSH 客户端中打开调试,您可能会发现是哪种情况。