Ошибка аутентификации nodejs ssh2

Я пытаюсь использовать библиотеку ssh2 nodejs для получения файлов с удаленного сервера. Мой код работает нормально для пользователя "xyz". Однако фактический пользователь будет иметь формат «abc\xyz», где abc — домен, а xyz — фактический пользователь. Когда я запускаю тот же код с пользователем, что и «abc\xyz», я продолжаю получать сообщение об ошибке: «Ошибка sftp: {[ОШИБКА Все настроенные методы проверки подлинности не удались] уровень:« проверка подлинности клиента »}»

Я могу использовать 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); }
  });
}

person nikhil tyagi    schedule 18.05.2015    source источник
comment
Можете ли вы показать соответствующий код?   -  person Trott    schedule 18.05.2015
comment
Это трудно понять. Код сложно форматировать в комментариях, которые не предназначены для длинного контента. Просто отредактируйте свой вопрос и поместите туда код. Спасибо!   -  person Trott    schedule 18.05.2015
comment
и просто чтобы уточнить, он правильно определяет значение имени пользователя (часть регистратора): имя пользователя выбирается как abc\xyz. Кроме того, я пробовал использовать разные комбинации, например, указать имя пользователя как «abc \ xyz», чтобы фактическое имя пользователя, переданное в интерфейс sftp, было «abc \ xyz».   -  person nikhil tyagi    schedule 18.05.2015
comment
На самом деле, позвольте мне перефразировать мой вопрос. Есть ли у нас ограничения на использование символа \ в имени пользователя в библиотеке ssh2?   -  person nikhil tyagi    schedule 18.05.2015
comment
Нет, искусственных ограничений на имена пользователей нет. Возможно, клиент OpenSSH аутентифицируется с помощью чего-то другого, кроме обычного метода аутентификации по паролю (например, с помощью закрытого ключа либо локально с диска, либо из экземпляра ssh-agent, либо с помощью keyboard-interactive). Вероятно, вы можете узнать, в чем дело, включив отладку в клиенте OpenSSH.   -  person mscdex    schedule 24.06.2015


Ответы (2)


возможно, вы забыли использовать двойную обратную косую черту в строке имени пользователя, чтобы предотвратить использование обратной косой черты в качестве маркера escape-специальных символов.

person Vlad Ruzov    schedule 20.08.2015

Надеюсь, что следующее может дать вам некоторое представление ... Я прочитал справочник по API ssh2 и ssh2streams и разработал следующее решение ...

Обратите внимание, если вы получили какую-либо ошибку, например: дескриптор не является буфером. Вероятно, это означает, что файл не существует или у вас нет разрешения на доступ к нему.

Дайте мне знать, если у вас есть какие-либо вопросы :)

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'
    });
}
person Mathers    schedule 23.03.2017