2012-11-10 22 views
9

मैं उत्सुक हूं कि गिटोलाइट काम जैसे कार्यक्रम - विशेष रूप से वे एसएसएच प्रोटोकॉल के साथ एक अनुरूप अनुभव प्रदान करने के लिए कैसे बातचीत करते हैं। क्या कोई उदाहरण दे सकता है कि मैं निम्नलिखित की तरह कुछ कैसे पूरा कर सकता हूं और जहां मैं इस विषय के बारे में और जान सकता हूं?गिटोलाइट जैसे प्रोग्राम कैसे काम करते हैं?

→ ssh [email protected] 
PTY allocation request failed on channel 0 
Hi <username>! You've successfully authenticated, but GitHub does not provide shell access. 
Connection to github.com closed. 

एक पक्ष प्रश्न: मेरी प्राथमिक भाषा जावास्क्रिप्ट है। क्या मैं नोडजेएस के साथ जो कुछ हासिल करना चाहता हूं उसे पूरा करना संभव है?

+2

गिटोलाइट खुला स्रोत है, आप सीख सकते हैं कि यह कोड/दस्तावेज़ीकरण को पढ़कर कैसे काम करता है। – tpg2114

+0

मैंने कोड पढ़ा है और जो मैं इकट्ठा कर सकता हूं वह एक पर्ल स्क्रिप्ट है। मुझे पर्ल पता नहीं है इसलिए मैं उम्मीद कर रहा था कि कोई मुझे उपर्युक्त उत्पादन करने के लिए एक त्वरित उदाहरण प्रदान कर सके। – user1813844

+0

http://stackoverflow.com/questions/5180981/ssh-client-for-node-js – Peter

उत्तर

24

खुद में गिटोलाइट authorization परत है जिसे एसएसएच की आवश्यकता नहीं है।
इसे केवल पता होना चाहिए जो इसे कॉल करने के लिए अधिकृत है या उस व्यक्ति को गिट कमांड करने के लिए अधिकृत नहीं है।

SSH प्रमाणीकरण के लिए प्रयोग किया जाता है (लेकिन आप उदाहरण के लिए के रूप में अच्छी प्रमाणीकरण के लिए एक HTTP अपाचे का उपयोग कर सकते)

रास्ता gitolite ssh द्वारा कहा जाता है "Gitolite and ssh" से समझाया गया है, और ssh तंत्र का उपयोग करता है forced command:

http://oreilly.com/catalog/sshtdg/chapter/ssh_0802.gif

~/.ssh/authorized_keys (gitolite ssh सर्वर पर) लगता है कि:

command="[path]/gitolite-shell sitaram",[more options] ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA18S2t... 
command="[path]/gitolite-shell usertwo",[more options] ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArXtCT... 

सबसे पहले, यह पता चलता है कि इस फ़ाइल में कौन सी सार्वजनिक कुंजी आने वाली लॉगिन से मेल खाती है। एक बार मैच मिलने के बाद, यह उस पंक्ति पर दिए गए आदेश को चलाएगा; उदाहरण के लिए, अगर मैंने लॉग इन किया है, तो यह [path]/gitolite-shell sitaram चलाएगा।
तो ध्यान देने वाली पहली बात यह है कि ऐसे उपयोगकर्ताओं को "खोल पहुंच" नहीं मिलती है, जो कि अच्छा है!

(आदेश मजबूर = कोई इंटरैक्टिव खोल सत्र: यह केवल एक प्रतिबंधित खोल प्रदान करेगा, केवल एक स्क्रिप्ट, हमेशा एक ही क्रियान्वित) कमांड को चलाने से पहले

तथापि, sshdSSH_ORIGINAL_COMMAND नामक एक पर्यावरण चर सेट अप करता है जिसमें आपके वर्कस्टेशन को भेजे गए वास्तविक git कमांड शामिल हैं।
यह वह आदेश है जो आपके पास चलाया गया होगा यदि आपके पास अधिकृत कुंजी फ़ाइल में command= भाग नहीं है।

gitolite-shell नियंत्रण हो जाता है है, यह निर्धारित करने के लिए कि आप कौन हैं पहला तर्क ("sitaram" "usertwo", आदि) पर लग रहा है। यह SSH_ORIGINAL_COMMAND वैरिएबल को यह पता लगाने के लिए देखता है कि आप किस भंडार को एक्सेस करना चाहते हैं, और चाहे आप पढ़ रहे हों या लिख ​​रहे हों।

अब यह है उपयोगकर्ता, भंडार, और अनुरोध (पढ़ना/लिखना), gitolite इसकी कॉन्फ़िगरेशन फ़ाइल को देखता है, और या तो अनुरोध को अनुमति देता है या अस्वीकार करता है।

तथ्य यह है कि authorized_keys एक पर्ल स्क्रिप्ट (gitolite-shell) कहता है क्योंकि Gitolite पर्ल में लिखा है।
यह जावास्क्रिप्ट प्रोग्राम को बहुत अच्छी तरह से कॉल कर सकता है।


किसी भी आदेश के बिना GitHub पर अपने ssh, आप अपने प्रश्न में अपने उल्लेख की तरह एक शुभकामना संदेश मिलता है, तो।
Gitolite एक समान संदेश प्रदर्शित करता है, के रूप में print_version() function of the info command script में विस्तृत:

:

hello admin, this is [email protected] running gitolite3 v3.0-12-ge0ed141 on git 1.7.3.4 

late 2013 Gitolite documentation अब आरेख कि जो सभी टुकड़ों को सारांशित में शामिल हैं: जैसे

sub print_version { 
    chomp(my $hn = `hostname -s 2>/dev/null || hostname`); 
    my $gv = substr(`git --version`, 12); 
    $ENV{GL_USER} or _die "GL_USER not set"; 
    print "hello $ENV{GL_USER}, this is " . ($ENV{USER} || "httpd") . "\@$hn running gitolite3 " . version() . " on git $gv\n"; 
} 

संदेश लग रहा है

ssh and Gitolite

+0

तो जिज्ञासा से बाहर, गिटहब जैसी साइट इन तकनीकों का उपयोग कैसे कर सकती है? यह 'git' उपयोगकर्ता के लिए 'अधिकृत_की' फ़ाइल को बनाए रखने के लिए अव्यवहारिक प्रतीत होता है जिसमें सभी की सार्वजनिक कुंजी होती है और साथ ही उस फ़ाइल में परिवर्तनों को संभालने (कुंजियां और क्या नहीं) को नियंत्रित किया जाता है? – user1813844

+0

@ उपयोगकर्ता 1813844 गिटहब? लेकिन गिटहब सबसे निश्चित रूप से * गिटोलाइट का उपयोग नहीं करते हैं। इसका अपना एसएसएच कुंजी प्रबंधन है। गिटोलाइट द्वारा उपयोग किए जाने वाले एसएसएच कुंजी प्रबंधन की तुलना में जो कम या ज्यादा व्यावहारिक नहीं है, मुझे लगता है। – VonC

+0

तो क्या उनके पास एसएसएचडी का अपना संस्करण है? मैं यह पता लगाने की कोशिश कर रहा हूं कि वे मानक प्रणाली के साथ अपनी प्रणाली कैसे बना सकते हैं। – user1813844

0

बुनियादी कदम हैं:

  1. चेक व्यक्ति लॉग इन करने में
  2. एक अभिगम नियंत्रण सूची के लिए सार्वजनिक की मानचित्र

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

+0

मुझे एसएसएच प्रोटोकॉल का उपयोग करने के यांत्रिकी में अधिक दिलचस्पी है। – user1813844

+0

http://stackoverflow.com/questions/402615/how-to-restrict-ssh-users-to-a-predefined-set-of-commands-after-login फिर अपने प्रश्न स्पष्ट करें। मैंने गिटोलाइट स्रोत के शीर्ष पर टिप्पणी को देखा और कहा कि "स्क्रिप्ट ~/.ssh/अधिकृत_keys से आ गई है" इसलिए मैंने अधिकृत_की फाइल से एक स्क्रिप्ट को कैसे बुलाया और उस प्रश्न को पाया। – tpg2114

+0

मैं यहां ट्रोल करने की कोशिश नहीं कर रहा हूं। लेकिन मैं इस सवाल का जवाब देने के लिए विस्तार से एक टन में जाने के इच्छुक नहीं हूं जब यह स्वतंत्र रूप से इसे समझने में ज्यादा प्रयास नहीं करता है। – tpg2114

5

ध्यान दें कि sshd ~/.ssh/अधिकृत_keys फ़ाइल का रैखिक स्कैन करता है। एक बार जब आप वहां 3000 किलोग्राम प्राप्त कर लेते हैं, तो जिन लोगों की चाबियाँ बाद में फ़ाइल में दिखाई देती हैं, वे अंतराल को नोटिस करना शुरू करते हैं - यह नेटवर्क अंतराल से अधिक होना शुरू होता है :-)

यही कारण है कि जिथब का अपना स्वयं का पैच संस्करण है एसएसडीडी का उनके पास सामान्य एसएसडीडी के साथ प्रबंधन करने में सक्षम होने के लिए बहुत सारे उपयोगकर्ता हैं!