ssh не работает с yes

ssh не работает с yes

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

yes yes | ssh *login@host*

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

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

решение1

Для этого запроса sshне используетсястандартный ввод&стандартный выводstreams – чтобы избежать путаницы с приглашением и вводом/выводом удаленной команды. (Представьте, что вы запускаете 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.

Связанный контент