リポジトリでのパスワードの扱いは、正確な問題に応じて異なる方法で処理されます。
1.しないでください。
そして、それを回避する方法は、いくつかの返信でカバーされています-.gitignore、config.exampleなど
または2.許可された人だけがリポジトリにアクセスできるようにする
つまり、パスワードを知ることが許可されている人々。chmod
ユーザーグループが思い浮かびます。また、リポジトリまたはサーバーを外部でホストしている場合、GithubまたはAWSの従業員が物事を閲覧できるようにする必要があるなどの問題も発生しますか?
または3.機密データを暗号化する(この返信の目的)
機密情報(パスワードなど)を含む構成ファイルをパブリックの場所に保存する場合は、暗号化する必要があります。ファイルは、リポジトリから復元するときに解読することも、暗号化された形式から直接使用することもできます。
暗号化された構成データを使用するJavaScriptソリューションの例を以下に示します。
const fs = require('fs');
const NodeRSA = require('node-rsa');
let privatekey = new NodeRSA();
privatekey.importKey(fs.readFileSync('private.key', 'utf8'));
const config = privatekey.decrypt(fs.readFileSync('config.RSA', 'utf8'), 'json');
console.log('decrypted: ', config);

したがって、JavaScriptの数行を書き込むだけで暗号化された構成ファイルを回復できます。
ファイルconfig.RSA
をgitリポジトリーに入れると、それは事実上バイナリー・ファイルになるため、Gitなどの多くの利点、たとえば変更をチェリー・ピックする機能を失うことに注意してください。
これに対する解決策は、キーと値のペアまたはおそらく単なる値を暗号化することです。たとえば、機密情報用の別のファイルがある場合はすべての値を暗号化でき、1つのファイルにすべての値がある場合は機密値のみを暗号化できます。(下記参照)
上記の私の例は、それを使用してテストを実行するすべての人にとって、またはいくつかのRSAキーと暗号化された構成ファイルの存在を前提としているため、最初から開始する例としては少し役に立ちませんconfig.RSA
。
RSAキーを作成するために追加された追加のコード行と、使用する構成ファイルを次に示します。
const fs = require('fs');
const NodeRSA = require('node-rsa');
/////////////////////////////
// Generate some keys for testing
/////////////////////////////
const examplekey = new NodeRSA({b: 2048});
fs.writeFileSync('private.key', examplekey.exportKey('pkcs8-private'));
fs.writeFileSync('public.key', examplekey.exportKey('pkcs8-public'));
/////////////////////////////
// Do this on the Machine creating the config file
/////////////////////////////
const configToStore = {Goodbye: 'Cruel world'};
let publickey = new NodeRSA();
publickey.importKey(fs.readFileSync('public.key', 'utf8'));
fs.writeFileSync('config.RSA', publickey.encrypt(configToStore, 'base64'), 'utf8');
/////////////////////////////
// Do this on the Machine consuming the config file
/////////////////////////////
let privatekey = new NodeRSA();
privatekey.importKey(fs.readFileSync('private.key', 'utf8'));
const config = privatekey.decrypt(fs.readFileSync('config.RSA', 'utf8'), 'json');
console.log('decrypted: ', config);
値のみを暗号化する
fs.writeFileSync('config.RSA', JSON.stringify(config,null,2), 'utf8');

このようなものを使用して、暗号化された値を持つ設定ファイルを復号化できます。
const savedconfig = JSON.parse(fs.readFileSync('config.RSA', 'utf8'));
let config = {...savedconfig};
Object.keys(savedconfig).forEach(key => {
config[key] = privatekey.decrypt(savedconfig[key], 'utf8');
});
別の行(例えば上の各設定項目とHello
し、Goodbye
上記)、Gitはファイルの中に何が起こっているのか良く理解するだろうとの違いではなく、完全なファイルなどの情報の項目に対する変更を保存します。Gitはマージやチェリーピックなどをより適切に管理できるようになります。
ただし、機密情報の変更をバージョン管理したいほど、安全なリポジトリソリューション(2)に移行し、暗号化された情報(3)ソリューションから離れます。