steelbrain / steelbrain/node-ssh

how can i input the password use keyboard-interactive

Open
#385 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
1k
Forks
94
PR merge metrics
No merged PRs in 30d

Description

env

i want to connet to the different host, some of them no config the no password login,so i need to try to connect the host no password firstly, if faild ,i'll use prompts ask the user to input the password to retry.

ssh2

when i use ssh2 to achieve it, the code like this:

conn.on('ready', () => {
 // some code
}).connect({
    host,
    port: 22,
    username,
    tryKeyboard: true,
    authHandler: (methodsLeft, partialSuccess, callback) => {
      prompts([{
        type: 'password',
        name: 'newPassword',
        message: `input the password of ${hostItem}:`,
      }]).then(({newPassword}) => {
        callback({type: 'password', username, password: newPassword})
      })
    },
 })

the code workd very well

node-ssh

the ssh2 hard to exec the multiple command on one connect. but the node-ssh is easy to do that.
when i try to connect , the problem was happen,

 Error: All configured authentication methods failed
    at doNextAuth (E:\workSpace\my-project-name\node_modules\node-ssh\node_modules\ssh2\lib\client.js:413:17)
    at tryNextAuth (E:\workSpace\my-project-name\node_modules\node-ssh\node_modules\ssh2\lib\client.js:484:5)
    at SSH2Stream.onUSERAUTH_FAILURE (E:\workSpace\my-project-name\node_modules\node-ssh\node_modules\ssh2\lib\client.js:597:5)
    at SSH2Stream.emit (events.js:310:20)
    at parsePacket (E:\workSpace\my-project-name\node_modules\ssh2-streams\lib\ssh.js:3682:10)
    at SSH2Stream._transform (E:\workSpace\my-project-name\node_modules\ssh2-streams\lib\ssh.js:701:13)
    at SSH2Stream.Transform._read (_stream_transform.js:191:10)
    at SSH2Stream._read (E:\workSpace\my-project-name\node_modules\ssh2-streams\lib\ssh.js:253:15)
    at SSH2Stream.Transform._write (_stream_transform.js:179:12)
    at doWrite (_stream_writable.js:442:12) {
  level: 'client-authentication'
}

from other issus i knew the authHandler not support so i tyied the onKeyboardInteractive, but obviously,it not be called ,because i can't see the console mark.
my code are following:

ssh.connect({
    host,
    username,
    port: 22,
    tryKeyboard: true,
    debug: console.log(),
    onKeyboardInteractive(name, instructions, instructionsLang, prompts, finish) {
      console.log('🔊🚀🚀🚀🔊 ~ RollbackCommand ~', prompts)
      if (prompts.length > 0 && prompts[0].prompt.toLowerCase().includes('password')) {
        prompts([{
          type: 'password',
          name: 'newPassword',
          message: `input the password of ${hostItem}:`,
        }]).then(({newPassword}) => {
          finish([newPassword])
        })
      }
    },
    })

i'm a newcoming ,so i'm not sure it's my code error or i use this API in wrong way.
i need some help, thx

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the failure with the supplied node-ssh connection options, then read node-ssh's authentication handling and its bundled ssh2 client flow. Compare the documented onKeyboardInteractive and tryKeyboard behavior with the authHandler example. Done means the keyboard-interactive callback is reached and the password retry completes without the client-authentication error.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, node.js, typescript
Domain
backend, networking
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.