Ẩn mật khẩu WLAN khi đẩy vào GitHub


8

Tôi đã bắt đầu sử dụng GitHub để lưu trữ mã Arduino. Tuy nhiên, một số mã của tôi sử dụng SSID và mật khẩu cho mạng WLAN mà tôi không muốn xuất bản.

Một cách phổ biến để xử lý việc này trong lập trình không nhúng là sử dụng tệp cấu hình, nhưng đó dường như không phải là một cách tiếp cận khả thi trong lập trình Arduino. Hiện tại tôi chỉ bình luận những thông tin nhạy cảm trước khi đẩy nó lên GitHub, nhưng một ngày nào đó tôi chắc chắn mình sẽ quên.

Có cách nào khác - tốt hơn - để xử lý việc này không?

Câu trả lời:


4

Chắc chắn bạn có thể sử dụng một tập tin cấu hình. Nó được gọi là tệp "tiêu đề" và bạn chỉ cần #includenó trong bản phác thảo của mình.

[config.h (not pushed)]

const char *password = "DOD982yp398fhgpwbn09tupf0p04";

[sketch.ino (pushed)]

#include "config.h"

// Now you can use the password variable.

Một phương pháp khác, tốt hơn nếu bạn có nhiều tệp trong bản phác thảo của mình, là sử dụng #definethay vì các biến trong tệp tiêu đề của bạn:

[config.h]

#define WIFI_PASSWORD "348r0yp80ytwp85tpj8yjp98y97t8t"

[sketch.ino]

#include "config.h"

const char *password = WIFI_PASSWORD;

Tất nhiên! Tôi chưa bao giờ sử dụng tệp tiêu đề theo cách này. Rất cám ơn câu trả lời.
Andrew Doble

1
Một điều cần xem là nếu bạn có nhiều tệp trong bản phác thảo của mình và bạn bao gồm tệp cấu hình đó trong mỗi tệp, bạn sẽ gặp lỗi về nhiều định nghĩa. Trong trường hợp đó, có lẽ tốt hơn là sử dụng #define thay vì xác định trực tiếp các biến. Tôi sẽ đăng một ví dụ.
Majenko

6

Bạn có thể cam kết các tệp sau vào dự án của mình, được đặt tên là certs.h:

// Replace with your actual SSID and password:

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

Gần đầu bản phác thảo của bạn, bạn thêm:

#include "credentials.h"

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

Bây giờ, bạn có thể chỉnh sửa thông tin đăng nhập.h để thêm SSID và mật khẩu thực của bạn và tiếp tục với quy trình công việc git bình thường của bạn, với một ngoại lệ: không bao giờ git add credentials.hnữa, cũng không git commit -a.

Bây giờ, git sẽ luôn nhắc bạn rằng thông tin đăng nhập.h đã được sửa đổi và không được tổ chức cho cam kết. Nó sẽ làm như vậy ngay cả khi bạn thêm tệp vào .gitignore của bạn. Nếu bạn luôn xem xét các thay đổi của mình trước khi cam kết, đây chỉ là một bất tiện nhỏ. Mặt khác, nếu bạn có xu hướng git commit -amà không xem xét lại những gì bạn đang cam kết, thì giải pháp này có thể không dành cho bạn.


Chỉnh sửa : Một ý tưởng tôi có được từ việc đọc ý kiến ​​của Chris Stratton. Nếu bạn sử dụng Makefile trong quy trình làm việc của riêng bạn (điều này đã được thảo luận trong trang web này một vài lần), bạn có thể cam kết thông tin đăng nhập này.h cho repo của bạn:

#ifndef CREDENTIALS_H
#define CREDENTIALS_H

// Replace with your actual SSID and password:
#define WIFI_SSID "Your SSID here"
#define WIFI_PASSWD "WLAN AP password here"

#endif

Tạo một bản sao của tệp này có tên true-certs.h và đặt thông tin xác thực ở đó (nhưng không đổi tên bảo vệ bao gồm). Sau đó thêm vào Makefile của bạn

CFLAGS += -include true-credentials.h

Giữ thông tin xác thực.h và Makefile ra khỏi repo. Bạn có thể thêm chúng vào .gitignore của bạn hoặc tốt hơn nữa là .git / thông tin / loại trừ.

Bây giờ bạn đã có phiên bản có thể biên dịch được với thông tin giả trong kho lưu trữ, bạn có thông tin xác thực khi bạn biên dịch trên máy của mình và git không làm phiền bạn về thông tin đăng nhập.


Điểm thú vị và cảm ơn. Có vẻ như tôi sẽ phải cẩn thận hơn trong cách tôi sử dụng git.
Andrew Doble

Đây là một giải pháp tốt hơn, tuy nhiên, không, git sẽ không cho bạn biết về các thay đổi đối với các tệp trong .gitignore trừ khi bạn thêm chúng một cách rõ ràng. Và việc thêm một tệp được loại trừ rõ ràng bởi .gitignore thường yêu cầu thêm bằng cờ lực.
Chris Stratton

@ChrisStratton: Trong thử nghiệm của mình, tôi đã thêm và cam kết thông tin giả, sau đó sửa đổi tệp và thêm nó vào .gitignore. Git liên tục nói với tôi về những thay đổi không được tổ chức cho cam kết: đã sửa đổi: thông tin đăng nhập. Quan điểm của tôi là có một phiên bản có thể biên dịch được trên repo, do đó thông tin giả đã được thêm vào đó.
Edgar Bonet

1
Nếu bạn cam kết một phiên bản giả, có. Bạn có thể muốn đặt cho phiên bản giả một tên khác, giống như credentials.h.CUSTOMIZE_MEhoặc một cái gì đó, và có thể sao lưu nó bằng một #ifndef #errorhướng dẫn đưa ra để tạo một bản sao mà không có hậu tố và chỉnh sửa.
Chris Stratton

Trên thực tế, đừng bận tâm, ý tưởng của tôi sẽ không hoạt động vì #includesẽ thất bại nếu không có thông điệp tùy chỉnh. Thực sự cho thấy tính nguyên thủy của Arduino IDE so với thứ gì đó cho phép tệp dự án hợp lý hoặc Makefile tùy chỉnh.
Chris Stratton

3

Dựa vào vai những người khổng lồ, tôi lấy câu trả lời của Edger Bonet và sử dụng một bước ngoặt hơi khác. Tôi đã đi theo con đường này vì tôi không sử dụng makefile và thấy giải pháp này hoạt động tốt với tôi trong dự án của tôi.

Tôi đã tạo một tệp tin xác thực giữ chỗ.h với thông tin sau (câu trả lời của Edger).

#ifndef CREDENTIALS_H
#define CREDENTIALS_H

// Replace with your actual SSID and password:
#define WIFI_SSID "Your SSID here"
#define WIFI_PASSWD "WLAN AP password here"

#endif

Tôi tiếp tục thêm tham chiếu đến tệp mới này trong tệp .ino.

#include "credentials.h"

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

Bây giờ là xoắn .. Tôi đã loại trừ tệp khỏi bị kiểm tra thay đổi bằng cách sử dụng lệnh --assume-không thay đổi.

git update-index - thông tin không thay đổi.h

Sau đó, bạn có thể sửa đổi tệp certs.h và sẽ không được nhắc thêm nó vào github.

Lưu ý, để kiểm tra lại tệp sử dụng --no-giả-không thay đổi.


Kudos cho tiền --assumed-unchangedboa!
cuộc nổi loạn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.