Почему я могу видеть запросы пароля через перенаправление вывода?

2444
Matt Simmons

Итак, у меня есть команда, которую я выдаю, которая по сути 'ssh'ing на разных хостах:

 command 2&>1 | grep "desired output" 

Время от времени, посреди команды, она наталкивается на хост, где у меня не настроены мои ключи. Когда это происходит, я получаю этот вывод:

 Password: 

Так как я перенаправляю STDERR в STDOUT, а затем фильтрую STDOUT, чтобы получить только «желаемый результат» (который не включает «Password:»), как мне представляется подсказка пароля?

6

1 ответ на вопрос

8
parkydr

SSH открывает / dev / tty для чтения и записи, чтобы запросить пароль.

Я предполагаю, что это функция безопасности, вход должен быть от tty, а не от stdin.

Если вы запустите strace ssh <host>strace, вы увидите системные вызовы, которые выполняет команда.

Я получил:

open("/dev/tty", O_RDWR|O_LARGEFILE) = 4 ... write(4, "dave@host"..., 16dave's password: ) = 16 read(4, 
Насколько я понимаю, это также причина, по которой вы не можете просто передать пароль в ssh из скрипта с перенаправлением. Вам понадобится `ожидать` (http://expect.sourceforge.net, см. Также http://stackoverflow.com/questions/459182/using-expect-to-pass-a-password-to-ssh) mpy 11 лет назад 1
Потрясающе. Я не думал копаться и поправлять это, так как это было мимолетное любопытство, но спасибо за это. Я уверен, что знания пригодятся! Matt Simmons 11 лет назад 0
@terdon - нужная вам команда (я думаю) находится в середине ответа, размещенного parkydr: `strace ssh ` Kevin Fegan 11 лет назад 0
@KevinFegan спасибо, я знаю. Сообщение было отредактировано с тех пор, как я разместил свой комментарий. Проверьте [журнал редактирования] (http://superuser.com/posts/569437/revisions). terdon 11 лет назад 0

Похожие вопросы