10

So, I've got a command that I'm issuing that is essentially 'ssh'ing into various hosts:

 command 2&>1 | grep "desired output" 

Every once in a while, in the midst of the command, it'll run into a host where I don't have my keys setup. When that happens, I get this output:

 Password: 

Since I'm redirecting STDERR into STDOUT, then filtering STDOUT to only give me "desired output" (which doesn't include "Password:"), how is the password prompt being presented to me?

1
  • Also happens when using the Cisco anyconnect vpn CLI. You can pass in the password from a config file, but the password prompt will always get sent to the terminal. Until I found your question I thought I was going insane. Jun 29, 2021 at 19:16

1 Answer 1

13

ssh opens /dev/tty for read and write to prompt for the password.

I guess this a security feature, the input has to be from the tty rather than stdin.

If you run strace ssh <host> strace will show you the system calls the command is making.

I get:

open("/dev/tty", O_RDWR|O_LARGEFILE)    = 4
...
write(4, "dave@host"..., 16dave's password: ) = 16
read(4,
4
  • 2
    From my understanding that's also the reason, why you can't simply pass the password to ssh from a script with a redirect. You'll need expect (expect.sourceforge.net and see also stackoverflow.com/questions/459182/…)
    – mpy
    Mar 21, 2013 at 15:04
  • Terrific. I didn't think to dig in and strace it, since it was a passing curiosity, but thanks for that. I'm sure the knowledge will come in useful! Mar 21, 2013 at 15:08
  • @terdon - the command you want (I think) is in the middle of the answer posted by parkydr: strace ssh <host> Mar 21, 2013 at 18:22
  • @KevinFegan thanks, I know. The post has been edited since I posted my comment. Check the editing log.
    – terdon
    Mar 21, 2013 at 18:24

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .