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