Как я могу создать сценарий оболочки, содержащий некоторые команды, которые требуют ввода пользователя, например

#!/bin/sh
useradd test
passwd test

Команде passwd требуется ввод данных (пароль). Можно ли обслужить этот ввод через скрипт оболочки? Спасибо!

4 ответа4

2

Обычно нет, так как большинство программ, которым требуется пароль, не будут читать из стандартного ввода, как это делают обычные процессы UNIX. Вместо этого они попытаются прочитать пароль от управляющего tty.

Если вы хотите создавать сценарии для таких приложений, вам придется использовать инструменты, как ожидается.

1

Пример:

$ ./input.sh foo bar baz

Источник:

#!/bin/bash
# input.sh

echo $0       # input.sh
echo $1       # foo
echo $3       # baz
1

Команда passwd специально защищена от этого (я полагаю, чтобы уменьшить ее полезность в атаках с использованием паролей). Он считывает свой ввод только с подключенного терминала, а не с обычного STDIN - это затрудняет его использование для сценариев смены пароля.

Но смотрите справочную страницу для usermod

0

Пользуйтесь ожидаемо. Пример здесь

#!/usr/bin/expect
set username [lindex $argv 0]
set newpass [lindex $argv 1]
spawn passwd $username
expect {*password:}
send "$newpass\r"
expect {*password:}
send "$newpass\r" 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .