В сценарии bash я хочу знать, как передавать ответы, например:
ssh -l username -i /home/ubuntu/.ssh/id host.com < yes
Соединение ssh спросит, хочу ли я продолжить соединение, и я хочу автоматически передать ответ «да» и ввести меня, но мой скрипт «<да», похоже, не работает. Кто-нибудь знает, как правильно набрать и передать ответ «да» в bash под Ubuntu?
Обычно вас спрашивают, хотите ли вы подключиться, когда ssh выполняет проверку ключа хоста. Вместо того, чтобы пытаться отключить, используя expect или канал, возможно, вы могли бы просто отключить его в своей конфигурации ssh.
Добавить StrictHostKeyChecking no
на ваш ~/.ssh/config
, и ssh больше не будет спрашивать вас, хотите ли вы подключиться, он просто подключится.
Использовать ssh -o "StrictHostKeyChecking no" -l username -i /home/ubuntu/.ssh/id host.com
чтобы вообще избежать вопроса.
Прежде всего, вы должны были попробовать это, а не < yes
:
$ echo "yes" | ssh -l username -i /home/ubuntu/.ssh/id host.com
Во-вторых, даже это не сработает, потому что ssh не читает ответ из stdin, он читает его прямо с терминала, поэтому вам понадобится что-то вроде Ожидать:
$ expect -c 'spawn dislocate ssh -l username -i /home/ciupicri/.ssh/id_rsa test3
expect {
"(yes/no)? " {
send "yes\n"
expect {
"Warn" exit
}
}
}'
$ dislocate
вывихнуть - это команда, поставляемая с Expect (по крайней мере, в Fedora). Ответить y
когда спросили connect? [y]
.
Вы также можете попробовать использовать ожидание, чистый Python Expect-подобный модуль. Посмотрите его hive.py и sshls.py Примеры.