Как ввести пароль для команды, которая запрашивает его в bash?
Я пишу функцию оболочки UNIX, которая будет выполнять команду, которая предложит пользователю ввести пароль. Я хочу жестко закодировать пароль в скрипт и предоставить его команде. Я пытался ввести пароль в команду следующим образом:
function() {
echo "password" | command
}
Это может не сработать для некоторых команд, так как команда может очистить входной буфер перед запросом пароля.
Я также пытался перенаправить стандартный ввод в файл, содержащий пароль, как это, но это тоже не работает:
function() {
echo "password" > pass.tmp
command < pass.tmp
rm pass.tmp
}
Я знаю, что некоторые команды позволяют вводить пароль в качестве аргумента,но я бы предпочел использовать стандартный ввод.
Я ищу быстрый и грязный способ вставить пароль в команду в баше.

Ответы - Как ввести пароль для команды, которая запрашивает его в bash? / How to provide password to a command that prompts for one in bash?

01.02.2011 03:32:04
Защищенные команды этого не допустят, и я боюсь, что правильно - это дыра в системе безопасности, через которую можно проехать на грузовике.
Если ваша команда не позволяет использовать перенаправление ввода, параметр командной строки или конфигурационный файл, то вам придется прибегнуть к серьезному обману.
Некоторые приложения на самом деле откроют /dev/tty
, чтобы гарантировать, что вам будет трудно победить безопасность. Вы можете обойти их, временно взяв на /dev/tty
(например, создав свой собственный канал), но это требует серьезных привилегий, и даже его можно победить.




01.02.2011 03:34:28
Это действительно ненадежная идея, но: Использование команды passwd из сценария оболочки

passwd
.



expect vpn.sh
)



03.12.2013 12:02:55
Как использовать автоэкспект для передачи пароля в команду:
Эти шаги проиллюстрированы на рабочем столе Ubuntu 12.10. Точные команды для вашего распределения могут немного отличаться.
Это опасно, потому что вы рискуете раскрыть любой пароль, который вы используете, любому, кто может прочитать файл сценария autoexpect.
Не раскрывайте свой пароль root или пароли опытных пользователей, передавая их через expect подобным образом. Корневые наборы найдут это в одно мгновение, и ваша коробка будет принадлежать.
EXPECT порождает процесс, считывает текст, который поступает, а затем отправляет текст, предварительно определенный в файле скрипта.
Убедитесь, что у вас установлены
expect
иautoexpect
:sudo apt-get install expect sudo apt-get install expect-dev
Читайте об этом:
man expect man autoexpect
Перейдите в свой домашний каталог:
cd /home/el
Пользователь
el
не может передать файл в корневой каталог и должен ввести пароль:touch testfile.txt sudo chown root:root testfile.txt [enter password to authorize the changing of the owner]
Это ввод пароля, который мы хотим автоматизировать. Перезагрузите терминал, чтобы убедиться, что sudo снова запросит у нас пароль. Снова зайдите в /home / el и сделайте это:
touch myfile.txt autoexpect -f my_test_expect.exp sudo chown root:root myfile.txt [enter password which authorizes the chown to root] autoexpect done, file is my_test_expect.exp
Вы создали
my_test_expect.exp
файл. Ваш супер секретный пароль хранится в этом файле открытым текстом. Это должно заставить вас чувствовать себя очень неуютно. Смягчите некоторый дискомфорт, максимально ограничив разрешения и права собственности:sudo chown el my_test_expect.exp //make el the owner. sudo chmod 700 my_test_expect.exp //make file only readable by el.
Вы видите такие команды в нижней части
my_test_expect.exp
:set timeout -1 spawn sudo chown root:root myfile.txt match_max 100000 expect -exact "\[sudo\] password for el: " send -- "YourPasswordStoredInPlaintext\r" expect eof
Вам нужно будет убедиться, что приведенные выше команды expect подходят. Если сценарий autoexpect слишком чувствителен или недостаточно чувствителен, то он зависнет. В этом случае это приемлемо, потому что ожидание-это ожидание текста, который всегда будет приходить.
Запустите ожидаем скрипт как пользователь Эл:
expect my_test_expect.exp spawn sudo chown root:root myfile.txt [sudo] password for el:
Пароль, содержащийся в my_test_expect.EXP был поставлен в этом файле в корень пользователя Эл. Чтобы узнать, принят ли пароль, загляните в
myfile.txt
:ls -l -rw-r--r-- 1 root root 0 Dec 2 14:48 myfile.txt
Это сработало, потому что это root, и Эл никогда не вводил пароль. Если вы предоставите свой пароль root, sudo или power user с помощью этого скрипта, то получить root на вашем ящике будет легко. Таково наказание за систему безопасности, которая не позволяет никому задавать вопросы.





22.01.2020 08:01:48
с read
Вот пример, который использует read
, чтобы получить пароль и сохранить его в переменной pass
. Затем 7z
использует пароль для создания зашифрованного архива:
read -s -p "Enter password: " pass && 7z a archive.zip a_file -p"$pass"; unset pass
Но имейте в виду, что пароль можно легко пронюхать .