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.

Другие вопросы по тегам