Qual é a melhor prática para lidar com senhas em repositorys git?

Eu tenho um pequeno script Bash que eu uso para acessar o twitter e pop up uma notificação Growl em determinadas situações. Qual é a melhor maneira de lidar com o armazenamento da minha senha com o script?

Eu gostaria de cometer este script para o repository git e torná-lo disponível no GitHub, mas estou querendo saber qual é a melhor maneira de manter meu login / senha privado ao fazer isso. Atualmente, a senha é armazenada no próprio script. Não consigo removê-lo antes de enviar porque todos os commits antigos conterão a senha. Desenvolver sem a senha não é uma opção. Eu imagino que eu deveria estar armazenando a senha em um arquivo de configuração externo, mas eu pensei em verificar se havia uma maneira estabelecida de lidar com isso antes de tentar colocar algo em conjunto.

    A maneira típica de fazer isso é ler as informações de senha de um arquivo de configuração. Se o seu arquivo de configuração é chamado foobar.config , você deve enviar um arquivo chamado foobar.config.example para o repository, contendo dados de amostra. Para executar seu programa, você criaria um arquivo local (não controlado) chamado foobar.config com seus dados de senha reais .

    Para filtrar sua senha existente de commits anteriores, consulte a página de ajuda do GitHub em Removendo dados confidenciais .

    Uma abordagem pode ser definir senha (ou chave de API) usando uma variável de ambiente. Portanto, essa senha está fora do controle de revisão.

    Com o Bash, você pode definir a variável de ambiente usando

     export YOUR_ENV_VARIABLE=your_password 

    Esta abordagem pode ser usada com serviços de continuous integration como o Travis , seu código (sem senha) sendo armazenado em um repository GitHub pode ser executado pelo Travis (com sua senha sendo definida usando a variável de ambiente).

    Com o Bash, você pode obter o valor de uma variável de ambiente usando:

     echo $YOUR_ENV_VARIABLE 

    Com o Python, você pode obter o valor de uma variável de ambiente usando:

     import os print os.environ['YOUR_ENV_VARIABLE'] 

    PS: esteja ciente de que é provavelmente um pouco arriscado (mas é uma prática bastante comum) https://www.bleepingcomputer.com/news/security/javascript-packages-caught-stealing-environment-variables/

    PS2: este artigo intitulado “Como armazenar com segurança chaves de API” https://dev.to/bpedro/how-to-securely-store-api-keys-ab6 pode ser interessante ler

    O que o Greg disse, mas eu gostaria de acrescentar que é uma boa idéia verificar em um arquivo foobar.config-TEMPLATE .

    Deve conter nomes de exemplo, senhas ou outras informações de configuração. Então é muito óbvio o que o foobar.config real deve conter, sem ter que procurar em todo o código para quais valores devem estar presentes em foobar.config e qual formato eles devem ter.

    Muitas vezes, os valores de configuração podem não ser óbvios, como sequências de conexão de database e coisas semelhantes.

    É possível usar o Vault, que protege, armazena e controla o access a tokens, senhas, certificados, chaves de API etc. Por exemplo, o Ansible usa o Ansible Vault, que lida com senhas ou certificados usados ​​em playbooks.

    Se você estiver usando o ruby ​​on rails, a gema Figaro é muito boa, fácil e confiável. Tem um baixo fator de dor de cabeça com o ambiente de produção também.