2015-02-18 8 views
10

मैं जेनकींस को एक पोस्ट कर्ल अनुरोध भेजकर जेनकींस नौकरी को अक्षम करना चाहता हूं।कर्ल के माध्यम से जेनकींस नौकरी को कैसे अक्षम करें?

मैं कर दिया है की कोशिश की है कि का उपयोग कर:

  1. curl -X POST http://<server>:8080/<jobname>/disable
  2. curl -X POST http://<server>:8080/<jobname>/disable?token=<token>
  3. curl -u <username>:<token> POST http://<server>:8080/<jobname>/disable

लेकिन हर बार असफल रहा। त्रुटि मैं हो रही है:

403 कोई वैध टुकड़ा अनुरोध

इस समस्या का एक अच्छा कर्ल आधारित समाधान है में शामिल किया गया था?

उत्तर

7

क्रंब त्रुटि इंगित करता है कि आप CSRF Protection का उपयोग कर रहे हैं। आपको अपने अनुरोध में एक उचित टुकड़ा हेडर शामिल करने की आवश्यकता है। क्रैम्ब जेनकींस एपीआई से प्राप्त किया जा सकता है जैसा ऊपर वर्णित जेनकिंस विकी पेज पर वर्णित है। "कर्ल और क्रंब के साथ ट्रिगर पैरामीटरयुक्त बिल्ड" के लिए answer "कर्ल अनुरोध में क्रंब हेडर जोड़ने के लिए वाक्यविन्यास दिखाता है।

+0

काम करेंगे ग है रंब डेटा हमेशा तय किया जाता है या मुझे इसे हर बार एक क्वेरी का उपयोग करना पड़ता है? – rrawat

+0

@rwt टुकड़ा ज्यादातर स्थिर है, लेकिन यह उपयोगकर्ता नाम और क्लाइंट आईपी पर निर्भर करता है। यदि आप एक स्क्रिप्ट लिख रहे हैं जहां वे पैरामीटर अलग-अलग होंगे, तो आप स्क्रिप्ट की शुरुआत में क्रंब का अनुरोध करने से बेहतर हैं। –

2

नीचे मुझे

curl -X POST http://<servername>/job/jobname/disable 

ऐसा करने के लिए सुनिश्चित करें कि उपयोगकर्ता पहुँच बनाने के लिए काम कर रहा है।

+1

यह केवल वहाँ है अगर कोई CSRF संरक्षण – rrawat

11

कोई वैध टुकड़ा नहीं है कि आपके जेनकिंस में सुरक्षा विकल्प सक्षम है जो one-click attacks से बचने के लिए मानक तरीके से अनुरोधों को रोकता है। आप जेनकींस सीएलआई का उपयोग नहीं कर सकते हैं, क्योंकि यह doesn't work yet है।

यहाँ (आपका जेनकींस पते के साथ localhost की जगह) curl का उपयोग कर कदम हैं:

  1. अपने उपयोगकर्ता API टोकन (/user/USER/configure से) ध्यान दें।
  2. जाओ अपने टुकड़ा:

    CRUMB=$(curl -s 'http://USER:[email protected]:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)') 
    
  3. अब आप हेडर में टुकड़ा भेज कर काम निष्क्रिय कर सकते हैं:

    curl -X POST -H "$CRUMB" http://USER:[email protected]:8080/<jobname>/disable 
    

    यदि उपरोक्त किसी कारण से काम नहीं करेगा, आप की कोशिश कर सकते इसके बजाय -u USER:TOKEN का उपयोग करें।

+1

महान काम करता है! ध्यान दें कि 'curl -u उपयोगकर्ता का उपयोग करने के लिए क्लीनर हो सकता है: यूआरएल में उपयोगकर्ता/पास रखने के बजाय http: // localhost: 8080/... पास करें (इस पर निर्भर करता है कि आप इसे कैसे स्क्रिप्ट कर रहे हैं)। – geerlingguy

3

मैंने पाया kenorb के समाधान के पहले भाग में मेरे लिए काम किया है, अर्थातटुकड़ा हो रही है, लेकिन दूसरे भाग के लिए, कर्ल कि वाक्य रचना पसंद नहीं आया, यह कहा:

कर्ल: (6) मेजबान 'http:' नहीं सुलझा सका

तो मैं निम्न सिंटैक्स का उपयोग करना पड़ा काम किया जो:

curl -H $CRUMB http://localhost:8080/<jobname>/disable -u USER:TOKEN

+0

धन्यवाद, मुझे अपने जावा ऐप में यही चाहिए, उपयोगकर्ता को भेजना: अनुरोध हेडर में टोकन –

4

सेटअप जेनकींस की 'वैश्विक सुरक्षा सेटिंग्स ": सही का निशान हटाएँ" रोकें क्रॉस साइट रिक्वेस्ट फोर्जरी कारनामे "

+0

यह मेरे लिए काम करता है। –

+0

धन्यवाद। यह मेरे लिए ठीक काम करता है !!! –

+2

सीएसआरएफ सुरक्षा को अक्षम करने से सुरक्षा छेद खुलता है और आपके उदाहरण को दुर्भावनापूर्ण रूप से तैयार किए गए लिंक https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF) के लिए कमजोर छोड़ देता है। – Andy

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