Скрытие пароля WLAN при отправке на GitHub

Я начал использовать GitHub для хранения кода Arduino. Однако некоторый мой код использует SSID и пароль для моей WLAN, которые я не хочу публиковать.

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

Есть ли другой, лучший способ решить эту проблему?

, 👍12


3 ответа


Лучший ответ:

5

Конечно, вы можете использовать файл конфигурации. Он называется файлом заголовка, и вы просто #включаете его в свой скетч.

[config.h (not pushed)]

const char *password = "DOD982yp398fhgpwbn09tupf0p04";

[sketch.ino (pushed)]

#include "config.h"

// Теперь вы можете использовать переменную пароля.

Еще один метод, который лучше, если у вас есть несколько файлов в скетче, — это использование #define вместо переменных в файле заголовка:

[config.h]

#define WIFI_PASSWORD "348r0yp80ytwp85tpj8yjp98y97t8t"

[sketch.ino]

#include "config.h"

const char *password = WIFI_PASSWORD;
,

Конечно! Мне никогда не приходило в голову использовать заголовочный файл таким образом. Большое спасибо за ответ., @Andrew Doble

Следует обратить внимание на одну вещь: если в вашем эскизе есть несколько файлов и вы включаете этот файл конфигурации в каждый из них, вы получите ошибки о нескольких определениях. В этом случае, вероятно, лучше использовать #define вместо непосредственного определения переменных. Я опубликую пример., @Majenko


7

Вы можете зафиксировать в своем проекте следующий файл с именем учетные данные.h:

// Замените своим фактическим SSID и паролем:

#define WIFI_SSID "Your SSID here"
#define WIFI_PASSWD "WLAN AP password here"

В начале скетча вы добавляете:

#include "credentials.h"

const char ssid[] = WIFI_SSID;
const char password[] = WIFI_PASSWD;

Теперь вы можете отредактировать учетные данные.h, добавив свои настоящие SSID и пароль, а также продолжайте свой обычный рабочий процесс git, за одним исключением: никогда снова git add inventory.h или git commit -a.

Теперь git всегда будет напоминать вам, что файл учетных данных был изменен и не подготовлен для фиксации. Это произойдет, даже если вы добавите файл в свой .gitignore. Если вы всегда просматриваете свои изменения перед фиксацией, это только небольшое неудобство. Если, с другой стороны, вы склонны git commit -a без проверки того, что вы делаете, то это решение, скорее всего, не для вас.


Правка. Идея, которую я получил, прочитав комментарии Криса Стрэттона. Если вы используете Makefile в своем собственном рабочем процессе (это уже обсуждалось на этом сайте несколько раз), вы можете зафиксировать этот файл учетных данных.h в своем репо:

#ifndef CREDENTIALS_H
#define CREDENTIALS_H

// Замените вашим фактическим SSID и паролем:
#define WIFI_SSID "Your SSID here"
#define WIFI_PASSWD "WLAN AP password here"

#endif

Создайте копию этого файла с именем true-credentials.h и поместите настоящий учетные данные (но не переименовывайте включенную защиту). Затем добавьте к ваш Makefile

CFLAGS += -include true-credentials.h

Не храните файл true-credentials.h и Makefile в репозитории. Можете добавить их в ваш .gitignore или, еще лучше, в .git/info/exclude.

Теперь у вас есть компилируемая версия с фиктивными учетными данными в репозиторий, у вас есть настоящие учетные данные, когда вы компилируете самостоятельно компьютер, и git не беспокоит вас об изменении учетных данных.h.

,

Интересные моменты и спасибо. Похоже, мне придется быть более осторожным в использовании git., @Andrew Doble

Однако это лучшее решение, нет, git *не* сообщит вам об изменениях в файлах в .gitignore, если вы не добавите их явно. А добавление файла, явно исключенного .gitignore, обычно требует добавления принудительного флага., @Chris Stratton

@ChrisStratton: В своем тесте я добавил и зафиксировал фиктивный учетные данные.h, затем изменил файл и добавил его в .gitignore. Git продолжал говорить мне: «Изменения не подготовлены для фиксации: модифицировано: учетные данные.h». Моя цель заключалась в том, чтобы иметь компилируемую версию в репозитории, поэтому туда был добавлен фиктивный файл Credentials.h., @Edgar Bonet

Если вы зафиксируете фиктивную версию, да. Возможно, вы захотите дать фиктивной версии другое имя, например credentials.h.CUSTOMIZE_ME или что-то в этом роде, и, возможно, закрепить ее с помощью #ifndef #error, дающего инструкции по созданию копии без суффикса и редактированию., @Chris Stratton

На самом деле, неважно, моя идея не сработает, поскольку без специального сообщения #include не сработает. Действительно демонстрирует примитивность Arduino IDE по сравнению с чем-то, позволяющим создать разумный файл проекта или собственный Makefile., @Chris Stratton

В конце концов остановился на подходе, заключающемся в добавлении ссылки «credentials.h» в файл «.git/info/exclude» и наличии фиктивного файла «credentials_CUSTOMIZE_ME.h», отслеживаемого git (как описано выше). Также добавлен файл README.md, чтобы все объяснить. На данный момент не использую Makefile, но это может измениться. Большое спасибо всем за вашу помощь., @Andrew Doble


5

Опираясь на плечи гигантов, я взял ответ Эджера Бонета и применил несколько иной поворот. Я пошел по этому пути, потому что не использую make-файл, и обнаружил, что это решение хорошо работает для меня в моем проекте.

Я создал файл учетных данных-заполнителей.h со следующей информацией (ответ Эджера).

#ifndef CREDENTIALS_H
#define CREDENTIALS_H

// Замените вашим фактическим SSID и паролем:
#define WIFI_SSID "Your SSID here"
#define WIFI_PASSWD "WLAN AP password here"

#endif

Я также добавил ссылку на этот новый файл в файл .ino.

#include "credentials.h"

const char ssid[] = WIFI_SSID;
const char pass[] = WIFI_PASSWD;

А теперь поворот. Я исключил файл из проверки на наличие изменений с помощью команды --assume-unchanged.

git update-index --assume-неизменные учетные данные.h

Затем вы можете изменить файл учетных данных.h, и вам не будет предложено добавить его на github.

Обратите внимание, что для повторной проверки файла используйте параметр --no-assume-untchanged.

,

Спасибо за совет «-предполагается-неизмененный»!, @rebellion