Есть ли способ для передачи конфиденциальных данных в bash, используя подсказку, за любую команду?
Предположим, что я использовал sha1pass генерировать хэш некоторых чувствительных пароль в командной строке. Я могу использовать
sha1pass mysecret выступает генерировать хэш mysecret выступает, но это имеет тот недостаток, что
mysecret выступает теперь в истории Баш. Есть ли способ, чтобы достичь конечной цели этой команды, избегая при этом открывая mysecret выступает в обычный текст, возможно, с помощью пароль
-стиль подскажешь?
Я'm также интересует обобщенный способ, чтобы сделать это для передачи конфиденциальных данных для любой команды. Метод изменится, когда конфиденциальные данные передается в качестве аргумента (например, в sha1pass) или на stdin в какую-то команду.
Есть ли способ, чтобы достичь этого?
Редактировать: этот вопрос привлекал большое внимание, и было несколько хороших ответов, предлагаемых ниже. Резюме:
- Согласно @Kusalananda'ы ответ, в идеале, никогда бы не дать пароль или секретный как аргумент командной строки в программу. Это уязвимые несколькими способами, как описано им, и необходимо использовать более эффективные утилиты, которая способна секретный ввод вывод
- @vfbsilva'ы ответ описано, как предотвратить вещи из хранящихся в истории Баш
- @Джонатан'ы ответ описывает вполне хороший способ для решения этой проблемы так долго, как программа может иметь свои секретные данные на стандартный ввод. Таким образом, Я'вэ решил принять этот ответ.
sha1pass
в мой ОП был просто пример, но обсуждение было установлено, что существуют более эффективные инструменты, которые берут данные на стандартный ввод. - как @Р.. отмечает в его ответом, использование расширения команды на переменной не сейф.
Так, в резюме, Я'вэ принят @Джонатан'ы ответ, поскольку он's лучшее решение, учитывая, что у вас хорошо разработаны и хорошо себя программу для работы. Хотя пароль или секретный как аргумент командной строки является принципиально небезопасной, остальные ответы способы смягчения простых соображений безопасности.
В идеале, вы никогда не ввести пароль в виде простого текста в командной строке в качестве аргумента команды. В таком случае пароль аргумента команде, и аргументы командной строки можно увидеть в таблице процессов с помощью простых инструментов, таких как
ПС
или войти в некоторые журналы аудита.Сказав, что, есть, конечно, способы сокрытия фактических пароль из оболочки'командная история.
Затем введите пароль и нажмите <и>введите</КБД>.
Руководитель команды здесь принимают ровно одну строку ввода и последние строки, что вы типа не будет частью данных, которые передаются
sha1pass`.Чтобы избежать персонажей с Эхом:
Команды будут действовать до его закрытия-Эхо
выключает отображение введенные символы на терминале. Эхо затем восстанавливается с
действовать до его закрытия Эха`.Переходить на стандартный ввод, что последняя команда может быть изменено (вы сделали бы это, если
sha1pass
принятые данные на стандартном вводе, но появляется, как будто это конкретное утилита игнорирует его стандартный ввод):Если вам нужен многоканальный вход (вышеупомянутое предполагает, что одна строка должна быть передана, с символом перевода строки в конце), а затем заменить все
глава
командыcat
и завершить ввод (при условииsomecommand
сам читает до конца файла) с <и>сочетание клавиш Ctrl+Д</роз> (далее <и>возвращение</роз> если вы хотите включить символ новой строки во входном, или дважды, если нет).Это будет работать независимо от того, какую оболочку вы используете (так как это был Борн-нравится или RC-типа раковины).
Снаряды Some могут быть сделаны не сохранить введенный команды в файлы истории, если команде предшествует пробел. Обычно это подразумевает наличие в сеть HISTCONTROL к ignorespace значение`
. Это подтверждается, по крайней мере,
Баши
КШна OpenBSD, а не, например,
ksh93или
тире.
ЗШпользователи могут использовать
histignorespace опцииили
HISTORY_IGNORE` переменную, чтобы определить шаблон в игнор.В снаряды, которые поддерживают чтение с "читать", не повторяя символы в терминал, вы также можете использовать
но это, очевидно, по-прежнему имеет тот же вопрос с потенциально раскрывая пароль в таблице процессов.
Если программа читает из стандартного ввода, и если оболочка поддерживает "и вот-строки&" и выше может быть изменено, чтобы
Если вы установите
HISTCONTROL
вот так:и запустить команду с пробелом:
он выиграл'т быть сохранены в истории.
Если вы используете
ЗШ
илиБаш
раковины, используйте опцию-sчтение
раковины встроенные, чтобы прочитать строку из терминального устройства без него эхом.Затем вы можете использовать некоторые необычные перенаправление, чтобы использовать переменную в качестве стандартного ввода.
Передавать конфиденциальные данные через трубу или здесь-док:
или:
Просто записать значение в файл и передайте файл:
Я'м не уверен, как
sha1pass
работает, если ее можно взять в качестве входного файла, вы можете использоватьsha1pass < mysecret выступает
. Если нет, с помощью "кошки" может стать проблемой, поскольку он включает в себя заключительную строку. Если это's в случае использования (если ваша "голова" поддерживает-с
):Если что terdon таки возможно, то, что's самый лучший раствор, проходящий через стандартный ввод. Единственная проблема осталось, это он написал пароль на диск. Мы можем вместо этого сделать:
Как Kusalananda сказал,
действовать до его закрытия -Эхо
гарантирует, что вы типа не видели, пока вы не действовать до его закрытия Эхораз.
голову -1получите одну строку из стандартного ввода и передать его на
sha1pass`.Я хотел бы использовать
в <предварительно><код>sha1pass " и$(кошка)"и </код></пре>
кошка
будут читать из stdin до конца строки, которая может быть вызвана нажатием Ctrl+D. Затем, результат будет передан как аргумент вsha1pass