steelbrain / steelbrain/node-ssh
how can i input the password use keyboard-interactive
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
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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