Как скрыть пароли и секретные ключи в переменных среды? (Linux)

#python-3.x #bash #environment-variables #sublimetext3 #manjaro

#python-3.x #bash #переменные среды #sublimetext3 #manjaro

Вопрос:

Я использую оболочку manjaro и bash. Я пытаюсь скрыть пароли и секретные ключи в переменных среды, чтобы я мог использовать их в своем скрипте python.

Я попробовал это в своем файле .bashrc

 export BOT_EMAIL="mymail@automail.com"
export BOT_PASS="pass_"
  

И если я запускаю этот скрипт с терминала, он запускается

 import os

a = os.environ.get("BOT_EMAIL")
b = os.environ.get("BOT_PASS")

print(a, b)
  

и выдает мне этот результат, как и ожидалось

 mymail@automail.com pass_
  

Но проблема возникает, когда я пытаюсь запустить скрипт из sublime text 3, это дает мне это

 None None
  

я думаю, что это проблема sublime, поэтому я перезапускал sublime около десяти раз и даже перезапускал свой компьютер, но он продолжает давать None .

Я новичок в программировании и Linux, было бы очень полезно, если кто-нибудь сможет решить эту проблему.

Комментарии:

1. ~/.bashrc используется только для интерактивных оболочек bash.

2. Обратите внимание, что «скрыть» — плохой термин для того, что вы описываете. Вы можете избавить себя от необходимости вводить информацию вручную, но переменные среды и файлы конфигурации оболочки не являются безопасными средствами для хранения или передачи конфиденциальной информации, такой как пароли.

3. Этот ответ Jenny D на вопрос о скрытии паролей в сценариях оболочки содержит превосходные рекомендации по безопасности паролей. Я рекомендую вам прочитать это.

Ответ №1:

Sublime наследует свои переменные среды из среды, в которой он запущен. Итак, если вы запустите его bash , он сможет прочитать все переменные, которые вы установили при запуске. Если вы запустите его из sublime_text.desktop файла (значок в меню или на боковой панели), он сможет считывать только переменные env, которые были установлены при запуске процесса запуска, то есть при входе в систему. Итак, если вы не хотите всегда запускать из командной строки, поместите переменные среды в свой ~/.profile файл, затем выйдите из системы и снова войдите. Ввод их ~/.bashrc не будет работать, так как это читается только для интерактивных сеансов.

Кроме того, вы можете определить переменные env в своей системе сборки. Пример может выглядеть примерно так:

 {
    "shell_cmd": "python3 -u "$file"",
    "file_regex": "^[ ]*File "(...*?)", line ([0-9]*)",
    "selector": "source.python",

    "env": {"PYTHONIOENCODING": "utf-8",
            "MYVAR1": "value1",
            "MYVAR2": "value2"
    }
}
  

Преимущество этого заключается в возможности изменять переменные и значения без необходимости выхода из системы и повторного входа.

Ответ №2:

Я думаю, что MattDMo затронул это (но просто чтобы уточнить, почему это важно — поскольку я недавно решил эту же проблему)

Ваша среда IDE наследует переменную env из программы-запуска. Чтобы ваш новый env var вступил в силу: выключите и перезапустите IDE.

Ответ №3:

Вы устанавливаете переменную среды для своего локального пользователя. Скорее всего, Sublime должен быть запущен от имени другого пользователя. Вы можете выяснить это с top ps помощью команды or .

Если вы хотите установить глобальные переменные, изучите /etc/profile или /etc/environment .

Комментарии:

1. Нет, вы не хотите запускать редактор от имени другого пользователя, и вы определенно не хотите возиться с глобальными переменными и /etc/ файлами…