тире скрипт, отправьте да для команды

Я хочу вызвать команду со сценарием, используя тире. вот мой код:

#!/bin/sh
ip='172.45.0.219'
cmd1='yes yes'
cmd2="./ssh foo@$ip"
eval $cmd1 | $cmd2

когда я запускаю свой скрипт, это мой вывод:

Pseudo-terminal will not be allocated because stdin is not a terminal.
The authenticity of host '172.45.0.219 (172.45.0.219)' can't be established.
ECDSA key fingerprint is SHA256:PpEShWXU3zQhkyAsy4Zd1Jddb2lW0ULautIdPMr8yxA.
Are you sure you want to continue connecting (yes/no)?

и ждем "да/нет". Я хочу, чтобы этот сценарий автоматически получал «да».

Пробую другие способы:

eval echo yes | $cmd2

и получить тот же результат. Спасибо за любую помощь.


person R.A.    schedule 24.06.2020    source источник
comment
Какой общий эффект должен иметь сценарий? Возможно, использование expect сделает больше смысла в этом случае.   -  person user1934428    schedule 24.06.2020
comment
Делает ли это ответить на ваш вопрос?   -  person user1934428    schedule 24.06.2020
comment
дорогой @ user1934428, возможно, «ожидание» было хорошим способом ответить на этот вопрос, но, к сожалению, мое устройство не поддерживало этот способ. Я пробовал это раньше, но понимаю, что «ожидание» неизвестно. по поводу второго комментария, я должен попробовать послезавтра, потому что сейчас у меня нет доступа к моему устройству. в любом случае большое спасибо.   -  person R.A.    schedule 25.06.2020
comment
Глупый вопрос: вы потрудились установить expect?   -  person user1934428    schedule 26.06.2020
comment
дорогой @ user1934428 На самом деле, я не знаю, как установить ожидаемое для моего встроенного устройства. Arm7 & linuxrc & sshd... Я пытался найти способ, но пока безуспешно. В любом случае, я подумал, что это не лучшее решение моей проблемы, поэтому я попробовал другой метод. Я хочу аутентифицировать пользователя, и поэтому решение было добавить эти 2 строки перед последней строкой. например: cmd=ssh-keyscan -H $ip ›› ~/.ssh/known_hosts eval $cmd теперь другая проблема. при запуске этого скрипта я попадаю в пользовательскую командную строку, но мне нужно выйти оттуда. Заранее благодарю за любую помощь   -  person R.A.    schedule 29.06.2020
comment
Я не думаю, что мне нужно запускать последнюю строку сценария, и это мое решение, но я действительно хочу знать, есть ли способ это исправить. Чтобы отправить exit из удаленной командной строки. Спасибо   -  person R.A.    schedule 29.06.2020
comment
Если вы взаимодействуете с программой, которая просто обрабатывает стандартный ввод, вы можете подготовить стандартный ввод со всеми необходимыми командами. Если вам нужно взаимодействие с программой, вам нужен какой-то инструмент для взаимодействия. Поскольку вы не хотите устанавливать expect, вы можете вместо этого попробовать использовать telnet. Я не знаю, будет ли это работать с ssh, так как я использовал это только с ftp. Также вы не сказали, почему ссылка, которую я отправил вам в моем предыдущем комментарии (24 июня), у вас не работает.   -  person user1934428    schedule 29.06.2020
comment
@user1934428 user1934428 Эта ссылка была для меня полезной, и это был точный ответ на этот случай. но мне просто нужно аутентифицировать пользователя, и я не хочу подключаться к пользователю. поэтому я попробовал другой метод и делюсь им.   -  person R.A.    schedule 30.06.2020


Ответы (1)


В этом случае пользователь должен быть аутентифицирован, и решение:

#!/bin/sh
ip='172.45.0.219'
cmd="ssh-keyscan -H $ip >> ~/.ssh/known_hosts"
eval $cmd

Однако это не настоящий ответ на этот вопрос.

person R.A.    schedule 29.06.2020