¿Cuál es la mejor práctica para manejar passwords en github?

Tengo un pequeño script de Bash que uso para acceder a Twitter y mostrar una notificación de Growl en ciertas situaciones. ¿Cuál es la mejor manera de gestionar el almacenamiento de mi contraseña con el script?

Me gustaría publicar este script en GitHub, pero me pregunto cuál es la mejor manera de mantener mi nombre de usuario / contraseña en privado mientras hago esto. Actualmente, la contraseña se almacena en el script en sí. No puedo eliminarlo justo antes de presionar porque todas las confirmaciones anteriores contendrán la contraseña. Desarrollar sin la contraseña no es una opción. Me imagino que debería save la contraseña en un file de configuration externo, pero pensé que verificaría si había una forma establecida de manejar esto antes de intentar y poner algo en común.

La forma típica de hacerlo es leer la información de contraseña de un file de configuration. Si su file de configuration se llama foobar.config , entonces debe enviar un file llamado foobar.config.example al repository, que contiene datos de muestra. Para ejecutar su progtwig, debería crear un file local (no rastreado) llamado foobar.config con sus datos de contraseña reales .

Para filtrar su contraseña existente de confirmaciones anteriores, consulte la página de ayuda de GitHub sobre cómo eliminar datos confidenciales .

Un enfoque puede ser establecer una contraseña (o key API) usando una variable de entorno. Entonces esta contraseña está fuera del control de revisión.

Con Bash, puede establecer la variable de entorno usando

 export YOUR_ENV_VARIABLE=your_password 

Este enfoque se puede usar con services de continuous integration como Travis , su código (sin contraseña) almacenado en un repository de GitHub puede ser ejecutado por Travis (con su contraseña configurada mediante la variable de entorno).

Con Bash, puede get el valor de una variable de entorno usando:

 echo $YOUR_ENV_VARIABLE 

Con Python, puede get el valor de una variable de entorno usando:

 import os print os.environ['YOUR_ENV_VARIABLE'] 

PD: tenga en count que probablemente sea un poco arriesgado (pero es una práctica bastante común) https://www.bleepingcomputer.com/news/security/javascript-packages-caught-stealing-environment-variables/

PS2: este artículo titulado "Cómo almacenar de forma segura las keys de API" https://dev.to/bpedro/how-to-securely-store-api-keys-ab6 puede ser interesante para leer

Lo que dijo Greg, pero agregaría que es una buena idea verificar el file foobar.config-TEMPLATE .

Debe contener nombres de ejemplo, passwords u otra información de configuration. Entonces es muy obvio lo que debería contener el verdadero foobar.config, sin tener que search en todo el código para el que los valores deben estar presentes en foobar.config y qué formatting deberían tener.

A menudo, los valores de configuration pueden no ser obvios, como las cadenas de connection de la database y cosas similares.

Uno puede usar Vault que asegura, almacena y controla el acceso a tokens, passwords, certificates, keys API, etc. Por ejemplo, Ansible usa Ansible Vault que trata con passwords o certificates usados ​​en libros de jugadas

Si usa Ruby on Rails, la gem Figaro es muy buena, fácil y confiable. Tiene un bajo factor de dolor de cabeza con el entorno de producción también.