स्क्रिप्ट में क्लोन क्लोन करने के लिए उपयोगकर्ता नाम / पासवर्ड कैसे दें, लेकिन .it / config में क्रेडेंशियल स्टोर न करें


31

मैं इस तरह से एक स्क्रिप्ट में एक गिट रिपॉजिटरी का क्लोनिंग कर रहा हूं:

git clone https://user:password@host.com/name/.git

यह काम करता है, लेकिन मेरा उपयोगकर्ता नाम और मेरा पासवर्ड! अब मूल url में संग्रहीत हैं .git/config

मैं इसे कैसे रोक सकता हूं, लेकिन फिर भी यह एक स्क्रिप्ट में करता है (इसलिए कोई मैनुअल पासवर्ड इनपुट नहीं)?


आप शायद बाद में मूल को अपडेट कर सकते हैं:git remote set-url origin https://host.com/name/.git
ceejayoz

@ceejayoz हाँ, संभव है। आइडिया के लिए धन्यवाद। मैं अभी भी एक समाधान के लिए आशा कर रहा हूं, जो क्रेडेंशियल को अस्थायी रूप से संग्रहीत नहीं करता है।
नाथन

4
ज़रूर - एक कुंजी के साथ SSH- आधारित विशेषाधिकार का उपयोग करें।
सिवायजोज़

2
क्या कोई कारण है कि आप SSH के बजाय https का उपयोग करते हैं? SSH चाबियों का समर्थन करता है।
मज़्हास

मैं प्रश्न को समझता हूं, लेकिन आप स्क्रिप्ट के अंदर संग्रहीत पासवर्ड के साथ ठीक क्यों हैं? उतना ही बुरा है।
मार्टिग्न कोर्टको

जवाबों:


20

मैं जिस विधि का उपयोग करता हूं वह वास्तव git pullमें क्लोन के बजाय उपयोग करना है । स्क्रिप्ट इस तरह दिखाई देगी:

mkdir repo
cd repo
git init
git config user.email "email"
git config user.name "user"
git pull https://user:password@github.com/name/repo.git master

यह आपके उपयोगकर्ता नाम या पासवर्ड को संग्रहीत नहीं करेगा .git/config। हालाँकि, जब तक कि अन्य कदम नहीं उठाए जाते हैं, सादा उपयोगकर्ता नाम और पासवर्ड तब दिखाई देगा जब प्रक्रिया वर्तमान प्रक्रियाओं को दिखाती है (जैसे ps)।

एक और सुझाव मैं (यदि आप ssh का उपयोग नहीं कर सकते हैं) वास्तव में सादा उपयोगकर्ता नाम / पासवर्ड के बजाय OAuth टोकन का उपयोग करना है क्योंकि यह थोड़ा अधिक सुरक्षित है। आप अपनी प्रोफ़ाइल सेटिंग से एक OAuth टोकन उत्पन्न कर सकते हैं: https://github.com/settings/tokens

फिर उस टोकन का उपयोग करके पुल कमांड होगा

git pull https://$OAUTH_TOKEN:x-oauth-basic@github.com/name/repo.git master

दुर्भाग्य से, मैं टोकन का उपयोग नहीं कर सकता। मैं गितुब का उपयोग नहीं कर रहा हूं, लेकिन एक निजी सर्वर।
नाथन

3
यह भी ध्यान दिया जाना चाहिए कि उपयोगकर्ता नाम और पासवर्ड, दृश्य में, उदाहरण के लिए किया जाएगा ps, जबकि पुल रन (कम से कम जब तक आप उन एक दूसरे की प्रक्रियाओं को देखने से रोका गया है)
derobert

शपथ उपयोग के लिए अंक। यह वही है जो मुझे उत्पादन / मंचन / देव में चाहिए था।
रोबॉटहूमंस

एक लाख शुक्रिया दोस्त। व्यर्थ घंटे n घंटे n अंत में आपका उत्तर फिर से आने लगा। : थम्सअप
जसदीपसिंह

17

IMO सबसे अच्छा समाधान एक कस्टम GIT_ASKPASSसहायक का उपयोग कर रहा है और पासवर्ड को अन्य पर्यावरण चर के रूप में वितरित करता है। इसलिए उदाहरण के लिए, एक फ़ाइल बनाएं git-askpass-helper.sh:

#!/bin/sh
exec echo "$GIT_PASSWORD"

और फिर git clone https://username@hostname/repoपर्यावरण चर के साथ चलाते हैं GIT_ASKPASS=/path/to/git-askpass-helper.shऔर GIT_PASSWORD=nuclearlaunchcodes

इसका फायदा यह है कि पासवर्ड प्रक्रिया सूची में भी दिखाई नहीं देगा।


रचनात्मक समाधान के लिए +1। यह git pullसमाधान की तुलना में थोड़ा अधिक सुरक्षित होगा और आपको सादा पासवर्ड को अपनी पसंद के स्वचालित तैनाती उपकरण में एक गुप्त के रूप में संग्रहीत करने की अनुमति देगा।
FGreg

13

आप अपनी ~/.netrcफ़ाइल में अपना कनेक्शन क्रेडिट दर्ज कर सकते हैं । की तर्ज पर कुछ:

machine host.example.net
login bart
password eatmyshorts

बस उस फ़ाइल को 600 तक चोदना सुनिश्चित करें। यदि आप विंडोज़ का उपयोग कर रहे हैं, तो निम्न लिंक उपयोगी हो सकती है: https://stackoverflow.com/questions/6031214/git-how-to-use-netrc-file-on- विंडोज़-टू-बचाने-उपयोगकर्ता और पासवर्ड

व्यक्तिगत रूप से, मेरे पास एसएसएच कुंजी का उपयोग करने की प्रवृत्ति है (यदि आपको अनुमति है, तो निश्चित रूप से)।


खैर, यह मेरे पासवर्ड को ~ / .netrc के अंदर छोड़ देगा। मैं भी ऐसा नहीं चाहता।
नाथन

2

एसओ के दर्जनों पदों, ब्लॉग्स आदि पर जाने के बाद , मैंने हर तरीके को आजमाया , और यही मेरे साथ आया। यह हर किसी को कवर करता है।

देखें Git साख और निजी संकुल cheatsheet

ये सभी तरीके और उपकरण हैं जिनके द्वारा आप एक इंटरैक्टिव पासवर्ड प्रॉम्प्ट के बिना एक रिपॉजिटरी को क्लोन करने के लिए गिट को सुरक्षित रूप से प्रमाणित कर सकते हैं

  • SSH सार्वजनिक कुंजी
    • SSH_ASKPASS
  • एपीआई एक्सेस टोकन
    • GIT_ASKPASS
    • इसके बजाय .itconfig
    • .itconfig [साख]
    • .git-साख
    • .netrc
  • बोनस: प्राइवेट पैकेज के साथ काम करता है
    • नोड / npm package.json
    • अजगर / पाइप / अंडे आवश्यकताओं
    • माणिक रत्न रत्न
    • golang go.mod

कोई सादे भंडारण के लिए सबसे अच्छा विकल्प

एसएसएच कीज़ के लिए यहाँ से जो भी पूछा गया है GIT_ASKPASS, या git credential storeओएस कीचेन मैनेजर का उपयोग करना सबसे अच्छा विकल्प हो सकता है।

चूँकि GIT_ASKPASS शायद 3 में से सबसे कम समझा गया है, इसलिए मैं इसे यहाँ विस्तार दूंगा - और अन्य लोग धोखा दे रहे हैं।

GIT_ASKPASS

GIT_ASKPASSस्क्रिप्ट कैसे बनाएँ :

echo 'echo $MY_GIT_TOKEN' > $HOME/.git-askpass

इसका इस्तेमाल कैसे करें:

export MY_GIT_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export GIT_ASKPASS=$HOME/.git-askpass
git clone https://token@code.example.com/project.git

स्क्रिप्ट को स्टडिन के रूप में प्राप्त होता है:

Password for 'scheme://host.tld':

लिपि Git ENVs को प्राप्त करती है जैसे:

GIT_DIR=/Users/me/project/.git
GIT_EXEC_PATH=/usr/local/Cellar/git/2.19.0_1/libexec/git-core
GIT_PREFIX=

अधिक विवरण में धोखा देती है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.