Отправка пароля в инструменты командной строки

Я пишу приложение python, которое использует служебную программу командной строки (пропозициональную, чтобы ее нельзя было изменить), чтобы выполнить часть своей работы. Проблема в том, что я должен передать пароль в качестве аргумента командной строки для инструмента, который легко будет видеть любой пользователь, выполняющий "ps ax". Как можно безопасно отправлять пароль в инструмент командной строки из python (или оболочки script)?

Ответ 1

Если приложение имеет какой-либо интерактивный режим, вы можете использовать что-то вроде pyexpect.

Если он принимает только пароли в командной строке, приложение было DESIGNED уязвимым для "ps ax", как вы ожидаете преодолеть оригинальный плохой дизайн? Это проприетарный, жалобы должны идти к виновному ^ H ^ H ^ H ^ H ^ H ^ Hauthor.

Ответ 2

Если пароль принят только в командной строке, вам не повезло. Вы абсолютно уверены, что нет возможности отправить пароль по-другому? Если вы можете отправить его по процессу stdin, вы можете поговорить с ним через трубку и безопасно отправить пароль таким образом.

Ответ 3

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

Ответ 4

Запишите еще один python script, который будет принимать пароль из командной строки с помощью getpass.getpass() и сохранить его в переменной. Затем вызовите команду из script с этой переменной с паролем в качестве параметра.

Ответ 5

Вы можете принудительно создать оболочку встроенной оболочки, как показано ниже.

somecommand --password=$(echo "Enter Password: " >&2;read -s PASSWORD;echo $PASSWORD)

Ввод пароля заполнит команду перед ее выполнением

Пароль не появится в истории вашей оболочки

Но он появится в вашем выводе "ps"

Ответ 6

Как насчет этого в Bash:

command_asking_for_password < <(command_that_prints_a_password; printf "\r")