2012-09-19 10 views
8

मैं निम्नलिखित कोडjgchconfigsessionfactory के लिए jgit के लिए कॉन्फ़िगरेशन कैसे सेट करें ताकि काम खींचें और पुश करें?

org.eclipse.jgit.api.Git.open(theRepoFile).pull().call() 

साथ jgit के एपीआई का उपयोग कर एक Git पुल/धक्का करने के लिए कोशिश कर रहा हूँ, लेकिन मैं अपवाद

JSchException Auth fail 
com.jcraft.jsch.Session.connect (Session.java:461) 
org.eclipse.jgit.transport.JschConfigSessionFactory.getSession (JschConfigSessionFactory.java:116) 
org.eclipse.jgit.transport.SshTransport.getSession (SshTransport.java:121) 
org.eclipse.jgit.transport.TransportGitSsh$SshPushConnection.<init> (TransportGitSsh.java:306) 
org.eclipse.jgit.transport.TransportGitSsh.openPush (TransportGitSsh.java:152) 
org.eclipse.jgit.transport.PushProcess.execute (PushProcess.java:130) 
org.eclipse.jgit.transport.Transport.push (Transport.java:1127) 
org.eclipse.jgit.api.PushCommand.call (PushCommand.java:153) 

हो रही है यहां तक ​​कि cgit पुल का उपयोग करते हुए और काम करता है धक्का हालांकि।

मैं उदाहरण कोड

Java git client using jgit

के लिए इतना जाँच की कोशिश की लेकिन इसके बाद के संस्करण प्रश्न क्या एक Git एक दूरस्थ रेपो कि सामान्य रूप से ssh द्वारा प्रमाणीकृत है के साथ खींच करने के लिए आवश्यक है की एक पूरी कोडित उदाहरण प्रदान नहीं करता है चांबियाँ। ~/.ssh/ या विंडोज़ समतुल्य से प्रमाणिक जानकारी प्राप्त करने का एक तरीका होना चाहिए।

उत्तर

3

समस्या Jsch करता है नहीं बॉक्स के बाहर ssh-agent एस का समर्थन करें। इसे काम करने के लिए https://github.com/ymnk/jsch-agent-proxy को कॉन्फ़िगर करने की आवश्यकता होगी।

एक विकल्प है अपना खुद का org.eclipse.jgit.transport.CredentialsProvider बनाना और org.eclipse.jgit.transport.CredentialItem को सही मानों पर सेट करें (उपयोगकर्ता से अनुरोध करके या फ़ाइल को देखकर)। आप डिफ़ॉल्ट CredentialsProviderorg.eclipse.jgit.transport.CredentialsProvider/setDefault

साथ बदल सकते हैं जानकारी के लिए मेरी clojure पुस्तकालय dj देखें: https://github.com/bmillare/dj/blob/library/src/dj/git.clj

+0

तो क्या आपने कोशिश की और यह काम किया? क्या आप इसे अधिक जानकारी में वर्णित कर सकते हैं, वास्तव में क्या करना है? प्रॉक्सी को किसी के कोड में एकीकृत करें? यह अगले डेवलपर को इस समस्या का सामना करने में मदद करेगा। – Vince

+0

मैंने वास्तव में जेएसएच-एजेंट-प्रॉक्सी का उपयोग नहीं किया, मैंने अपना खुद का प्रमाण पत्र प्रदाता बनाया जिसने उपयोगकर्ता को पासफ्रेज के लिए कहा।यह वास्तव में क्लोजर में लिखा गया है लेकिन विवरण वहां हैं। https://github.com/bmillare/dj/blob/library/src/dj/git.clj – bmillare

-1

मुझे अस्पष्ट रूप से जेएसएच के साथ एक त्रुटि मिल रही है जो मुझे थोड़ी देर के लिए अवरुद्ध कर दिया क्योंकि लॉग बहुत स्पष्ट नहीं था। मैं इसे एक ही समस्या है पक्का नहीं बता सकता लेकिन मैं अपने समस्या को हल करने के लिए इस पेज का पालन किया:

https://help.github.com/articles/generating-ssh-keys

(यह एक गलत नेटवर्क विन्यास की वजह से था)

+0

लिंक आप पोस्ट कुछ भी नहीं jgit विशिष्ट है। मैंने कहा कि मैं सामान्य गिट का उपयोग करने में सक्षम हूं, जिसका अर्थ है कि एसएसएच कुंजी ठीक है। एक संभावना यह है कि मैं gentoo keychain उपकरण का उपयोग करता हूं, जो कुछ ऐसा हो सकता है जो jgit को पता नहीं है कि कैसे निपटना है। – bmillare

+0

यदि आप जो लोग कहते हैं, उसे सुनना नहीं चाहते हैं, तो मत पूछें। "क्योंकि लॉग बहुत स्पष्ट नहीं था" शायद पर्याप्त स्पष्ट नहीं हो सकता है: गिट पूरी तरह से काम कर रहा है, मैं केवल उसी दिशा में देख रहा हूं जैसा आप करते हैं। मुझे यकीन नहीं है कि मेरा जवाब क्या लायक है क्योंकि यह एक अस्पष्ट स्मृति है, लेकिन यदि आप कोशिश नहीं करते हैं, कम से कम आप सुनिश्चित हैं कि यह किसी भी बेहतर काम नहीं करेगा। और वास्तव में यह jGit buit से संबंधित नहीं है यदि आपको jgit और ssh config दोनों लिखे गए पृष्ठ मिलते हैं, तो इसे पोस्ट करने में संकोच न करें, यहां लक्ष्य यह है कि अगला पाठक उपयोगी जानकारी पाता है। – Vince

+0

ओह और कुल मिलाकर, आप इसे समय के साथ सीखेंगे, लेकिन गिट जेजीआईटी की तुलना में अजीब उपयोग के साथ अधिक सहिष्णु है। – Vince

11

Jsch स्वचालित रूप से आपकी SSH कुंजियां की पहचान करेगा लेकिन इन एक पासवर्ड से सुरक्षित कर रहे हैं असफल हो जायेगी। आप इस प्रकार का CredentialsProvider के माध्यम से पदबंध निर्दिष्ट करना होगा:

JschConfigSessionFactory sessionFactory = new JschConfigSessionFactory() { 
@Override 
protected void configure(OpenSshConfig.Host hc, Session session) { 
    CredentialsProvider provider = new CredentialsProvider() { 
     @Override 
     public boolean isInteractive() { 
      return false; 
     } 

     @Override 
     public boolean supports(CredentialItem... items) { 
      return true; 
     } 

     @Override 
     public boolean get(URIish uri, CredentialItem... items) throws UnsupportedCredentialItem { 
      for (CredentialItem item : items) { 
       ((CredentialItem.StringType) item).setValue("yourpassphrase"); 
      } 
      return true; 
     } 
    }; 
    UserInfo userInfo = new CredentialsProviderUserInfo(session, provider); 
    session.setUserInfo(userInfo); 
} 
}; 
SshSessionFactory.setInstance(sessionFactory); 
+0

इसके लिए आपको बहुत कुछ धन्यवाद - मैं जेजीआईटी के लिए एसएसएच प्रमाणीकरण के साथ संघर्ष कर रहा था, इसे पाया और यह मेरी समस्या को तुरंत हल कर लिया । बहुत धन्यवाद। –

+0

@ जोपिनटोपॉल: मैंने इसी तरह के स्निपेट का उपयोग करके ऐसा करने की कोशिश की। कृपया मदद कर सकते हैं। मेरा सवाल है: https://stackoverflow.com/questions/45889326/userauth-fail-using-jgit-to-access-git-repo-securely-for-pullcommand – mohanjot

संबंधित मुद्दे