ब्लॉग पर वापस जाएं

शुरुआत करेंगाइड

API कुंजी सुरक्षित रूप से संग्रहीत करें: env वेरिएबल, .gitignore, लीक फ़िक्स

अपनी CheapTokens कुंजी को कोड और git से बाहर रखें: एनवायरनमेंट वेरिएबल सेट करें, .env को .gitignore में जोड़ें, और जानें कि कुंजी लीक होने पर क्या करें।

CheapTokens Team द्वाराप्रकाशित 10 मिनट का पाठ

एनवायरनमेंट वेरिएबल export और API कुंजी के लिए .gitignore पंक्ति वाला टर्मिनल
इस पृष्ठ पर
  1. कुंजी आपके कोड में क्यों नहीं होनी चाहिए
  2. चरण 1: कुंजी को एनवायरनमेंट वेरिएबल में रखें
  3. चरण 2: .env फ़ाइल का उपयोग करें, उसे कमिट किए बिना
  4. अगर कुंजी लीक हो गई: क्या करें, किस क्रम में
  5. स्वयं जाँचें

कुंजी को एनवायरनमेंट वेरिएबल में रखें, अपने कोड में नहीं, और किसी भी .env फ़ाइल को .gitignore में एक पंक्ति जोड़कर git से बाहर रखें। अगर कोई कुंजी पहले ही कहीं सार्वजनिक हो चुकी है, तो पहले कुंजी को संभालें और बाद में सफ़ाई करें: जब तक कुंजी आपके कोड और टूल्स में मौजूद है, git इतिहास साफ़ करने से कुछ नहीं होता।

बात बस इतनी है। यह गाइड व्यावहारिक संस्करण है (मूल बातें What is an API key में हैं): तीन कमांड, एक चलता हुआ अनुरोध, और बुरे दिन के लिए एक छोटी योजना।

कुंजी आपके कोड में क्यों नहीं होनी चाहिए#

API कुंजी एक पासवर्ड है जो आपका पैसा खर्च करता है। जिसके पास भी यह होगी, वह आपके बैलेंस पर अनुरोध भेज सकता है, और सेवा उन्हें आपसे अलग नहीं बता सकती।

गड़बड़ आमतौर पर बहुत साधारण तरीके से होती है। आप पहला अनुरोध चलाने के लिए कुंजी को स्क्रिप्ट में पेस्ट करते हैं, स्क्रिप्ट चल जाती है, आप git push करते हैं, और रिपॉज़िटरी सार्वजनिक हो जाती है। या आप अपनी कॉन्फ़िग फ़ाइल किसी सहकर्मी को भेज देते हैं। या किसी एरर का स्क्रीनशॉट लेते हैं जिसके कोने में कुंजी दिख रही होती है। हर बार नतीजा एक ही होता है।

GitHub इस पैटर्न को अच्छी तरह जानता है। इसकी सीक्रेट स्कैनिंग (GitHub docs, 29 अक्टूबर 2026 को जाँचा गया) सभी ब्रांचों के पूरे Git इतिहास में हार्डकोडेड क्रेडेंशियल्स खोजती है, और साथ ही issues, pull requests, discussions, wikis और secret gists में भी, और मिलने पर अलर्ट उठाती है। इसका मतलब है कि अगले कमिट में उस पंक्ति को हटाने से कुछ नहीं बदलता: पुराने कमिट में वह अब भी मौजूद रहती है।

यहाँ वही स्क्रिप्ट पहले और बाद में दी गई है।

तुलना करें

वही स्क्रिप्ट, कुंजी कोड से बाहर

कोड में कुंजी

python
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key="<your-key>",  # pasted here: ends up in git
)

एनवायरनमेंट से कुंजी

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

दूसरा संस्करण जैसा है वैसा ही GitHub, चैट या कोड रिव्यू में जा सकता है। कुंजी आपकी मशीन पर, फ़ाइल से बाहर रहती है।

चरण 1: कुंजी को एनवायरनमेंट वेरिएबल में रखें#

एनवायरनमेंट वेरिएबल एक नामित मान है जो आपका टर्मिनल अपने द्वारा शुरू किए गए हर प्रोग्राम को देता है। स्क्रिप्ट CHEAPTOKENS_API_KEY को नाम से माँगती है और कभी नहीं देखती कि वह कहाँ से आया।

macOS और Linux पर:

bash
export CHEAPTOKENS_API_KEY="<your-key>"

Windows PowerShell पर:

powershell
setx CHEAPTOKENS_API_KEY "<your-key>"

दो बातें लोगों को उलझा देती हैं। export केवल उसी टर्मिनल विंडो के लिए रहता है, इसलिए इसे बनाए रखने के लिए लाइन को अपने शेल प्रोफ़ाइल (~/.zshrc या ~/.bashrc) में जोड़ें। और setx उस विंडो को नहीं बदलता जिसमें आपने इसे टाइप किया: परीक्षण से पहले नया टर्मिनल खोलें।

अब एक पूरा अनुरोध। यह OpenAI-संगत एंडपॉइंट https://api.cheaptokens.dev/v1 और DeepSeek-V4-Flash को उसकी पूरी id (deepseek-ai/DeepSeek-V4-Flash-0731; ids CheapTokens docs से लें, क्योंकि प्रदाताओं के बीच नाम अलग होते हैं) के साथ उपयोग करता है:

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

resp = client.chat.completions.create(
    model="deepseek-ai/DeepSeek-V4-Flash-0731",
    messages=[{"role": "user", "content": "Say hi in five words."}],
)
print(resp.choices[0].message.content)
print(resp.usage)

एक छोटा अभिवादन लगभग 20 टोकन इन और 20 आउट का अनुरोध है, जो मौजूदा कीमतों पर $0.0000023 है (पूरी सूची pricing page पर है)। अगर आपने अभी तक पहला अनुरोध नहीं भेजा है, तो Your first API request with CheapTokens शून्य से शुरू करके इसे समझाता है।

मॉडल का उत्तर choices[0].message.content में वापस आता है, और usage उसके द्वारा गिने गए टोकन दिखाता है। कुंजी फ़ाइल में कभी नहीं दिखती।

Terminal showing the .env and .gitignore commands
The three commands that keep the key out of git

चरण 2: .env फ़ाइल का उपयोग करें, उसे कमिट किए बिना#

हर नई विंडो में export टाइप करना थकाऊ हो जाता है। एक .env फ़ाइल मान को एक ही जगह, प्रोजेक्ट के पास रखती है:

text
CHEAPTOKENS_API_KEY=<your-key>

Python इसे python-dotenv (pip install python-dotenv) से पढ़ता है:

python
from dotenv import load_dotenv
load_dotenv()  # fills os.environ from .env

फ़ाइल तभी सुरक्षित है जब git उसे कभी न देखे। पहले कमिट से पहले इसे .gitignore में जोड़ें:

bash
echo ".env" >> .gitignore
git check-ignore -v .env

अगर सब कुछ सही है, तो दूसरा कमांड .gitignore:1:.env .env जैसा कुछ प्रिंट करता है: git आपको बताता है कि कौन-सा नियम फ़ाइल को अनदेखा कर रहा है। अगर यह कुछ भी प्रिंट नहीं करता, तो नियम काम नहीं कर रहा। Windows पर, एडिटर में .env पंक्ति के साथ .gitignore बनाएँ, या Add-Content .gitignore .env का उपयोग करें: PowerShell का >> UTF-16 लिख सकता है, जिसे git अनदेखा कर सकता है।

एक जाल: .gitignore केवल उन फ़ाइलों को प्रभावित करता है जिन्हें git अभी ट्रैक नहीं कर रहा। अगर .env पहले ही एक बार कमिट हो चुकी है, तो git rm --cached .env चलाएँ ताकि git उसे ट्रैक करना बंद कर दे, और उसके अंदर की कुंजी को उजागर मानें (नीचे इस पर और बात)। एक अच्छी आदत यह है कि मान के बजाय वेरिएबल नाम और प्लेसहोल्डर के साथ .env.example कमिट करें, ताकि सहकर्मी को पता हो कि क्या सेट करना है।

अगर कुंजी लीक हो गई: क्या करें, किस क्रम में#

हो सकता है कुंजी किसी सार्वजनिक रिपॉज़िटरी में चली गई हो, हो सकता है वह किसी स्क्रीनशॉट में रही हो, हो सकता है आपने पूरा कॉन्फ़िग किसी फ़ोरम थ्रेड में पेस्ट कर दिया हो। क्रम किसी भी एक कदम की गति से ज़्यादा मायने रखता है।

GitHub का अपना मार्गदर्शन (वही पेज, 29 अक्टूबर 2026 को जाँचा गया) यह है कि क्रेडेंशियल को तुरंत रोटेट करें; Git इतिहास को फिर से लिखना वैकल्पिक है और क्रेडेंशियल रद्द होने के बाद अक्सर अनावश्यक। लोग इसे उल्टे तरीके से करते हैं: वे एक घंटा इतिहास साफ़ करने में लगाते हैं जबकि कुंजी अब भी काम कर रही होती है। ऐसा न करें।

अपना मामला चुनें

आपकी कुंजी के साथ क्या हुआ? सबसे नज़दीकी स्थिति चुनें

कुंजी उस कमिट में थी जो अब सार्वजनिक है

पहले कुंजी को कोड से हटाएँ, एनवायरनमेंट वेरिएबल पर स्विच करें, .env को .gitignore में जोड़ें, और अपने बैलेंस में उन अनुरोधों को देखें जो आपने नहीं भेजे। इतिहास साफ़ करना बाद में एक अच्छी चीज़ है, ज़रूरी हिस्सा नहीं।

कुंजी किसी स्क्रीनशॉट या साझा फ़ाइल में थी

वही क्रम: अपने टूल्स में उस कुंजी का उपयोग बंद करें और एनवायरनमेंट वेरिएबल पर जाएँ, फिर हो सके तो पोस्ट या फ़ाइल हटा दें। हटाया गया स्क्रीनशॉट पहले ही कॉपी हो चुका हो सकता है, इसलिए केवल हटाने पर भरोसा न करें।

वही कुंजी कई टूल्स में उपयोग हो रही है

हर उस जगह से गुज़रें जहाँ कुंजी थी: आपकी शेल प्रोफ़ाइल, .env फ़ाइलें, एडिटर और टर्मिनल टूल्स, और हर एक को एनवायरनमेंट वेरिएबल की ओर इंगित करें, ताकि बदलने के लिए एक ही जगह हो। अगर कोई टूल वेरिएबल पढ़ने में विफल होता है, तो 401/404 troubleshooting guide दिखाता है कि एरर कैसा दिखता है।

Three steps after a leak: take the key out of the code, update every tool, send a test request
Key out of the code first, then every tool, then a test request

सफ़ाई के बाद, चरण 1 की तरह एक छोटा परीक्षण अनुरोध भेजें, और अपना बैलेंस जाँचें। अगर यह उत्तर देता है और बैलेंस तथा अनुरोध सामान्य दिखते हैं, तो सफ़ाई पूरी हो गई; अगले कुछ दिनों तक बैलेंस पर नज़र रखें। जो कुंजी सार्वजनिक हो चुकी है, उसे कोड से हटाने के बाद भी उजागर माना जाना चाहिए, इसलिए बैलेंस और अनुरोध संख्या में उन चीज़ों पर नज़र रखें जो आपने नहीं भेजीं, और उस कुंजी को नई जगहों पर दोबारा उपयोग न करें। कुंजी आमतौर पर किन जगहों पर रहती है, इसके लिए Where to plug in your own API key देखें।

स्वयं जाँचें#

स्वयं आज़माएँइसे आज़माएँ: वेरिएबल unset करें और स्क्रिप्ट चलाएँ। आपको क्या दिखता है?उत्तर दिखाएँ

Python आपकी मशीन से कोई भी अनुरोध निकलने से पहले KeyError: 'CHEAPTOKENS_API_KEY' के साथ रुक जाता है। यही अच्छी विफलता है: स्क्रिप्ट चुपचाप किसी पेस्ट की गई कुंजी का उपयोग करने के बजाय कुंजी के बिना चलने से इनकार कर देती है। अगर आपको इसके बजाय 401 दिखता है, तो वेरिएबल सेट है लेकिन कुंजी गलत है; कुंजी और पता को 401/404 guide के सामने जाँचें।