SSH समूह पठनीय अनुमतियों के साथ कुंजी के उपयोग की अनुमति नहीं देता है


9

मेरे पास एक विकास गिट सर्वर है जो liveशाखा को धक्का देने पर एक जीवित सर्वर को तैनात करता है। प्रत्येक उपयोगकर्ता का अपना लॉगिन होता है और इसलिए वह post-receiveहुक जो लाइव परिनियोजन करता है, अपने उपयोगकर्ता के अंतर्गत चलाया जाता है।

क्योंकि मैं उपयोगकर्ताओं को सार्वजनिक कुंजी को रिमोट लाइव सर्वर पर अधिकृत कुंजी के रूप में बनाए रखना नहीं चाहता, इसलिए मैंने कुंजी का एक सेट बनाया है, जो कि रिमोट लाइव सर्वर में जोड़ने के लिए git सिस्टम से संबंधित है ( post-receiveहुक में मैं उपयोग कर रहा हूं। विकल्प के $GIT_SSHसाथ निजी कुंजी सेट -iकरने के लिए)।


मेरी समस्या यह है कि सभी उपयोगकर्ताओं को जीवित रहने के लिए तैनात करना चाहते हैं, क्योंकि git सिस्टम की निजी कुंजी को कम से कम समूह पठनीय होना चाहिए और SSH वास्तव में इसे पसंद नहीं करता है।

यहाँ त्रुटि का एक नमूना है:

XXXX@XXXX /srv/git/identity % ssh -i id_rsa XXXXX@XXXXX
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for 'id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: id_rsa

मैंने देखा है कि ssh को केवल कनेक्शन के माध्यम से जाने के लिए मजबूर करने के तरीके में कुछ खोजने की उम्मीद है, लेकिन मुझे कुछ भी नहीं मिला है, लेकिन लोग आँख बंद करके कह रहे हैं कि आपको केवल एक उपयोगकर्ता के लिए कुछ भी करने की अनुमति नहीं देनी चाहिए।

जवाबों:


5

यहाँ एक अच्छा सरल और सुरक्षित तरीका है।

Ssh हस्तांतरण के लिए एक नया उपयोगकर्ता बनाएँ, मैं इसे git-सिंक कहूँगा। गिट रिपॉजिटरी के लिए समूह सदस्यता के साथ सर्वर पर एक समान उपयोगकर्ता बनाएं। सिंक-उपयोगकर्ता के लिए सार्वजनिक कुंजी को उस उपयोगकर्ता में अधिकृत करें_की 2 फ़ाइल। मैं मान रहा हूँ git उपयोगकर्ता gitgroup के सभी सदस्य हैं। सुनिश्चित करें कि गिट-सिंक उपयोगकर्ता भी इस समूह का सदस्य है।

अब एक पंक्ति को शामिल करने के लिए अपनी / etc / sudoers फ़ाइल को संपादित करें:

%gitgroup ALL=(git-sync) NOPASSWD: /usr/bin/git

यह gitgroup समूह के किसी भी सदस्य को पासवर्ड के बिना आदेश / usr / bin / Git-सिंक के रूप में बिट को चलाने के लिए अनुमति देगा।

अब अपने पोस्ट-हुक में कुछ इस तरह डालें:

sudo -u git-sync /usr/bin/git push origin

यह उस चीज़ से बेहतर है जिसे मैं ढूंढ रहा था, धन्यवाद!
जेसी रॉस

11

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

इसका एक अच्छा लाभ यह है कि आपको sudo की आवश्यकता नहीं है - समाधान अधिक सरल होगा।

ध्यान दें कि यह मूल समस्या में फिर से चलेगा यदि आप अपने git रेपो में पुश करने के लिए रूट का उपयोग कर रहे हैं।


2
यह बहुत बढ़िया है, और "जवाब नहीं देते" की तुलना में बहुत बेहतर है। धन्यवाद!
इयान मैकगोवन

2
Permissions 0640 for 'id_rsa' are too open.

निजी कुंजी को निजी रहना चाहिए। आप किसी को भी इसे पढ़ने के लिए अनुमति नहीं देनी चाहिए।

क्योंकि मैं उपयोगकर्ताओं को सार्वजनिक कुंजी को रिमोट लाइव सर्वर पर अधिकृत कुंजी के रूप में बनाए रखना नहीं चाहता, इसलिए मैंने कुंजी का एक सेट बनाया है, जो कि रिमोट लाइव सर्वर में जोड़ने के लिए git सिस्टम से संबंधित है ( post-receiveहुक में मैं उपयोग कर रहा हूं। विकल्प के $GIT_SSHसाथ निजी कुंजी सेट -iकरने के लिए)।

  1. सेटअप एक महत्वपूर्ण ssh करने के लिए उत्पादन सर्वर के लिए देव से जोड़ी
  2. में post-receiveहुक स्क्रिप्ट, कुछ इस तरह का प्रयास करें:

    if [ "live" == "$branch" ]; then
        ssh -t user@prod "git --work-tree=... --git-dir=... checkout -f"
    fi
    

मैं "उत्पादन सर्वर के लिए देव से ssh के लिए एक मुख्य जोड़ी" कैसे सेट कर सकता हूं, यह वही है जिसके साथ मुझे कोई समस्या है। मेरे पास पहले से ही 2 जगह हैं।
जेसी रॉस

1
देव पर: ssh-keygen, ssh-copy-id user@prod। ठेस पर: chmod 700 ~/.ssh, chmod 600 ~/.ssh/authorized_keys
क्वांटा

1
समस्या यह है कि मल्टीपल उपयोगकर्ता हैं, इसलिए मुझे उस प्रत्येक उपयोगकर्ता के लिए दोहराना होगा जो सर्वर पर मौजूद प्रत्येक प्रोजेक्ट द्वारा समय को संपादित करना चाहता है।
जेसी रॉस

नहीं, आपको केवल दो और उपयोगकर्ताओं को सेटअप करने की आवश्यकता है: एक को एसएच से एसएच से ठेस तक, और दूसरे को git checkout...(ठेस पर) चलाने के लिए ।
क्वांटा

post-receiveहुक (देव मशीन), तो वे सभी विभिन्न कुंजी होगा कि एक परिवर्तन (इसलिए उन अनुमति के तहत) धक्का है उपयोगकर्ता द्वारा चलाया जाता है मैं मदद जो उपयोगकर्ता यह हो जाएगा नहीं कर सकता। post-receiveकार्रवाई में दो अलग-अलग सर्वरों पर दो हुक हैं ।
जेसी रॉस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.