रिपॉजिटरी में पासवर्ड के साथ व्यवहार करना आपके सटीक समस्या के आधार पर विभिन्न तरीकों को संभाला जाएगा।
1. यह मत करो।
और करने से बचने के तरीके कुछ उत्तरों में शामिल हैं - .ignignore, config.example, आदि
या 2. केवल अधिकृत लोगों को ही रिपॉजिटरी सुलभ बनाएं
यानी वे लोग जिन्हें पासवर्ड जानने की अनुमति है। chmod
और उपयोगकर्ता समूहों के दिमाग में आता है; यदि आप अपने रिपॉजिटरी या सर्वर को बाहरी रूप से होस्ट करते हैं, तो भी गिथब या एडब्ल्यूएस कर्मचारियों को चीजों को देखने की अनुमति दी जानी चाहिए?
या 3. संवेदनशील डेटा एन्क्रिप्ट करें (इस उत्तर का उद्देश्य)
यदि आप किसी सार्वजनिक स्थान पर संवेदनशील जानकारी (जैसे पासवर्ड) वाली अपनी कॉन्फ़िगर फ़ाइलों को संग्रहीत करना चाहते हैं तो उसे एन्क्रिप्ट करने की आवश्यकता है। रिपॉजिटरी से बरामद होने पर फाइलों को डिक्रिप्ट किया जा सकता है, या सीधे उनके एन्क्रिप्टेड फॉर्म से भी इस्तेमाल किया जा सकता है।
एन्क्रिप्टेड कॉन्फ़िगरेशन डेटा का उपयोग करने के लिए एक उदाहरण जावास्क्रिप्ट समाधान नीचे दिखाया गया है।
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);
तो आप जावास्क्रिप्ट की कुछ पंक्तियों को लिखने के लिए एक एन्क्रिप्टेड कॉन्फ़िगर फ़ाइल को पुनर्प्राप्त कर सकते हैं।
ध्यान दें कि एक फ़ाइल config.RSA
को git रिपॉजिटरी में डालने से प्रभावी रूप से यह एक बाइनरी फ़ाइल बन जाएगी और इसलिए यह Git जैसी कुछ चीज़ों के कई लाभों को खो देगी, जैसे चेरी से इसमें बदलाव करने की क्षमता।
इसका समाधान कुंजी मान जोड़े या शायद मानों को एन्क्रिप्ट करने के लिए हो सकता है। आप सभी मानों को एन्क्रिप्ट कर सकते हैं, उदाहरण के लिए यदि आपके पास संवेदनशील जानकारी के लिए एक अलग फ़ाइल है, या केवल एक फ़ाइल में सभी मान होने पर आप संवेदनशील मानों को एन्क्रिप्ट कर सकते हैं। (निचे देखो)
ऊपर दिया गया मेरा उदाहरण इसके साथ एक परीक्षण करने के इच्छुक किसी भी व्यक्ति के लिए थोड़ा बेकार है, या एक उदाहरण के रूप में शुरू करने के लिए यह कुछ आरएसए कुंजी और एक एन्क्रिप्टेड कॉन्फ़िगरेशन फ़ाइल के अस्तित्व को मानता है 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 मर्ज और चेरी पिक्स आदि को बेहतर तरीके से प्रबंधित करने में सक्षम होगा।
हालाँकि जितना अधिक आप संवेदनशील जानकारी में परिवर्तन को नियंत्रित करना चाहते हैं, उतना ही आप SAFE REPOSITORY समाधान (2) की ओर बढ़ रहे हैं और एक अलग जानकारी (3) समाधान से दूर हैं।