¿Cuál es la mejor práctica para tratar contraseñas en repositorys git?

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 enviar este script al repository de git y ponerlo a disposición 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 guardar la contraseña en un archivo de configuración 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 archivo de configuración. Si su archivo de configuración se llama foobar.config , entonces debe enviar un archivo llamado foobar.config.example al repository, que contiene datos de muestra. Para ejecutar su progtwig, debería crear un archivo 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 clave 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 servicios de integración continua 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 obtener el valor de una variable de entorno usando:

 echo $YOUR_ENV_VARIABLE 

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

 import os print os.environ['YOUR_ENV_VARIABLE'] 

PD: tenga en cuenta 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 claves 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 archivo foobar.config-TEMPLATE .

Debe contener nombres de ejemplo, contraseñas u otra información de configuración. Entonces, es muy obvio lo que debe contener el verdadero foobar.config, sin tener que buscar en todo el código cuyos valores deben estar presentes en foobar.config y qué formato deberían tener.

A menudo, los valores de configuración pueden no ser obvios, como las cadenas de conexión de la base de datos y cosas similares.

Uno puede usar Vault que asegura, almacena y controla el acceso a tokens, contraseñas, certificados, claves API, etc. Por ejemplo, Ansible usa Ansible Vault que trata con contraseñas o certificados 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.