Назад | Перейти на главную страницу

Ответ bash piping в Ubuntu

В сценарии 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 Примеры.