2

Я должен был решить дело бахромой в последнее время , когда я должен был добавить несколько серверов отпечатков пальцев для known_hosts пользователя (авторизация осуществляется с помощью пары ключей). Я думал, что самое простое решение будет просто позвонить

yes yes | ssh *login@host*

, Удивительно (по крайней мере для меня), это не работает: ssh прежнему спрашивает, нужно ли добавить отпечаток пальца, и требует ручного ввода.

Мой вопрос: почему это так, каков механизм, лежащий в основе этого поведения?

1 ответ1

4

В этом приглашении ssh не использует потоки stdin & stdout - чтобы избежать путаницы с вводом / выводом удаленной команды. (Представьте, что вы запускаете ssh host cat something.tar | tar x , и вдруг tar x жалуется на мусор на входе.)

Вместо этого ssh открывает специальное устройство /dev/tty , которое всегда указывает на его "управляющий терминал", записывает приглашение и читает ответ с него.


В частности, для вашей проблемы OpenSSH поставляется с ssh-keyscan , инструментом для получения открытых ключей многих серверов одновременно.

ssh-keyscan host1 host2 host3 >> ~/.ssh/known_hosts

(Я не уверен, что вы имели в виду known_hosts или действительно нужны authorized_keys ключи здесь.)


В общем случае утилиту expect можно использовать для автоматизации программ, которые обычно выполняют свои операции ввода-вывода через tty.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .