Лучший способ автоматизировать этот тип ввода, используя expect
или лучше pexpect
. большинство серверов поставляются с Python, по крайней мере, с современным дистрибутивом.
Во-первых, вы сказали, что ваша виртуальная машина не expect
установлена? Я не уверен, почему это важно. Есть ли причина, по которой вы не можете установить / выполнить что-либо под своей локальной учетной записью?
Следующее соображение, почему вы должны даже использовать passwd
??? Вы также можете изменить пароль, заменив хэш, указанный в /etc/shadow
. Очевидно, что вам сначала нужно правильно сгенерировать хеш, но если вы используете поддерживаемый хэш, он должен работать как положено. Теперь, как бы вы написали такое действие, это упражнение для вас.
Я также хочу упомянуть, passwd
не читает его вход от STDIN. Если я не ошибаюсь, это читает из tty. Так что никакой фантазии просто так echo
и sleep
не получится. Однако возможно использование HEREDOC, но предполагается, что система достаточно отзывчива. Вы можете быть в состоянии разбить его и sleep
между входами. Я только что проверил это, оно работало на моей рабочей станции Ubuntu.
#!/bin/bash passwd root <<'EOF' newpassword newpassword EOF