Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Failsafe option doesn't work for SSH Auth Failure #165

Closed
henokgetachew opened this issue May 12, 2017 · 6 comments
Closed

Failsafe option doesn't work for SSH Auth Failure #165

henokgetachew opened this issue May 12, 2017 · 6 comments
Labels

Comments

@henokgetachew
Copy link

I have searched for a solution to this but I haven't been able to find one. Here's the log that flightplan fails with (I have replaced host names)

● Safely failed connecting to '{host1-address}': getaddrinfo ENOTFOUND {host1-address}
● Safely failed connecting to '{host2-address}': getaddrinfo ENOTFOUND {host2-address}
● Error: This Fiber is not yielding
    at Client.<anonymous> ({path-to-my-project}/node_modules/flightplan/lib/transport/ssh.js:53:18)
    at emitOne (events.js:96:13)
    at Client.emit (events.js:191:7)
    at tryNextAuth ({path-to-my-project}/node_modules/ssh2/lib/client.js:296:12)
    at SSH2Stream.onUSERAUTH_FAILURE ({path-to-my-project}/node_modules/ssh2/lib/client.js:473:5)
    at emitTwo (events.js:106:13)
    at SSH2Stream.emit (events.js:194:7)
    at parsePacket ({path-to-my-project}/node_modules/ssh2-streams/lib/ssh.js:3647:10)
    at SSH2Stream._transform ({path-to-my-project}/node_modules/ssh2-streams/lib/ssh.js:551:13)
    at SSH2Stream.Transform._read (_stream_transform.js:167:10)
    at SSH2Stream._read ({path-to-my-project}/node_modules/ssh2-streams/lib/ssh.js:212:15)
    at SSH2Stream.Transform._write (_stream_transform.js:155:12)

I have set the property failsafe to true for each of the hosts. The error is coming from node-fibers (this code). I am not sure how to proceed. Any help, including workarounds, is appreciated. Thanks.

@henokgetachew
Copy link
Author

Update: this only happens when the failure is an auth failure. Here's the error that makes it crash:

{ Error: All configured authentication methods failed
    at tryNextAuth ({path-to-my-project}/node_modules/ssh2/lib/client.js:294:17)
    at SSH2Stream.onUSERAUTH_FAILURE ({path-to-my-project}/node_modules/ssh2/lib/client.js:473:5)
    at emitTwo (events.js:106:13)
    at SSH2Stream.emit (events.js:194:7)
    at parsePacket ({path-to-my-project}/node_modules/ssh2-streams/lib/ssh.js:3647:10)
    at SSH2Stream._transform ({path-to-my-project}/node_modules/ssh2-streams/lib/ssh.js:551:13)
    at SSH2Stream.Transform._read (_stream_transform.js:167:10)
    at SSH2Stream._read ({path-to-my-project}/node_modules/ssh2-streams/lib/ssh.js:212:15)
    at SSH2Stream.Transform._write (_stream_transform.js:155:12)
    at doWrite (_stream_writable.js:329:12)
    at writeOrBuffer (_stream_writable.js:315:5) level: 'client-authentication' }

@henokgetachew henokgetachew changed the title 'Fiber not yielding' error thrown when running flightplan on a large number of hosts Failsafe option doesn't work for SSH Auth Failure May 12, 2017
@pstadler
Copy link
Owner

pstadler commented May 12, 2017

Are you running the latest version? I'm unable to reproduce this.

$ node --version; fly --version
v6.9.1
0.6.15

# ---
$ cat flightplan.js
var plan = require('flightplan')

plan.target('test', [
  {
    host: 'nohost',
    failsafe: true,
    user: 'root'
  },
  {
    host: '<host that exists>',
    port: 22,
    user: 'root',
    failsafe: true
  },
  {
    host: '<host that exists>',
    port: 22,
    user: 'root',
    failsafe: true
  },
  {
    host: 'foobarfofofo',
    failsafe: true,
    user: 'root'
  },
])

plan.remote(function (remote) {
  remote.exec('ls -al')
})

# ---
$ fly test
✈ Running default:test
✈ Connecting to 'nohost'
✈ Connecting to '<host that exists>'
✈ Connecting to '<host that exists>'
✈ Connecting to 'foobarfofofo'
● Safely failed connecting to 'nohost': getaddrinfo ENOTFOUND nohost nohost:22
● Safely failed connecting to 'foobarfofofo': getaddrinfo ENOTFOUND foobarfofofo foobarfofofo:22
● Safely failed connecting to '<host that exists>': All configured authentication methods failed
● Safely failed connecting to '<host that exists>': All configured authentication methods failed
✈ Flightplan finished after 463 ms

I also tried this using dynamic host configuration with the same result.

@pstadler pstadler added the bug label May 12, 2017
@henokgetachew
Copy link
Author

henokgetachew commented May 12, 2017

You should be able to reproduce it if you add agent: 'process.env.SSH_AUTH_SOCK'.

$ node --version; fly --version
v7.8.0
0.6.15

#-----
$ cat flightplan.js
var plan = require('flightplan')

plan.target('test', [
  {
    host: 'nohost',
    failsafe: true,
    user: 'root'
  },
  {
    host: '<host that exists>',
    port: 22,
    user: 'root',
    failsafe: true
  },
  {
    host: ‘<host that exists>’,
    port: xxx,
    user: ‘my_username’,
    agent: 'process.env.SSH_AUTH_SOCK',
    password: 'xyz',
    failsafe: true
  },
  {
    host: 'foobarfofofo',
    failsafe: true,
    user: 'root'
  }
])

plan.remote(function (remote) {
  remote.exec('ls -al')
})
$ fly test
✈ Running default:test
✈ Connecting to 'nohost'
✈ Connecting to '<host that exists>'
✈ Connecting to '<host that exists>'
✈ Connecting to 'foobarfofofo'
● Safely failed connecting to 'nohost': getaddrinfo ENOTFOUND nohost nohost:22
● Safely failed connecting to '<host that exists>': getaddrinfo ENOTFOUND <host that exists> <host that exists>:22
● Safely failed connecting to 'foobarfofofo': getaddrinfo ENOTFOUND foobarfofofo foobarfofofo:22
● Safely failed connecting to '<host that exists>': connect ENOENT process.env.SSH_AUTH_SOCK
✈ Flightplan finished after 2.23 s
● Error: This Fiber is not yielding
    at Client.<anonymous> ({path-to-my-project}/node_modules/flightplan/lib/transport/ssh.js:53:15)
    at emitOne (events.js:96:13)
    at Client.emit (events.js:191:7)
    at tryNextAuth ({path-to-my-project}/node_modules/ssh2/lib/client.js:296:12)
    at SSH2Stream.onUSERAUTH_FAILURE ({path-to-my-project}//node_modules/ssh2/lib/client.js:473:5)
    at emitTwo (events.js:106:13)
    at SSH2Stream.emit (events.js:194:7)
    at parsePacket ({path-to-my-project}/node_modules/ssh2-streams/lib/ssh.js:3647:10)
    at SSH2Stream._transform ({path-to-my-project}/node_modules/ssh2-streams/lib/ssh.js:551:13)
    at SSH2Stream.Transform._read (_stream_transform.js:167:10)

@henokgetachew
Copy link
Author

Looks as though the code's looking to get a final output while the server is giving it another chance at auth?

@pstadler
Copy link
Owner

I could reproduce this by passing agent: 'process.env.SSH_AUTH_SOCK'. This should be without quotes. Nevertheless, I released 0.6.16 to prevent such problems.

@henokgetachew
Copy link
Author

Confirming that this works. Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants