यह प्रश्न सर्वोत्तम प्रथाओं के बारे में है। मैं फैब्रिक के साथ एक तैनाती स्क्रिप्ट चला रहा हूँ। मेरी तैनाती उपयोगकर्ता 'तैनाती' सेवाओं को पुनरारंभ करने के लिए सुडो की जरूरत है। इसलिए मैं अपनी स्क्रिप्ट में इन आदेशों को चलाने के लिए कपड़े से सूडो फ़ंक्शन का उपयोग कर रहा हूं। यह ठीक काम करता है लेकिन स्क्रिप्ट निष्पादन के दौरान पासवर्ड के लिए संकेत देता है। मैं तैनाती के दौरान पासवर्ड टाइप नहीं करना चाहता हूं। यहां सबसे अच्छा अभ्यास क्या है। एकमात्र समाधान जो मैं सोच सकता हूं वह सूडो अनुमतियों को बदल रहा है ताकि मेरे परिनियोजन उपयोगकर्ता द्वारा चलाए जाने वाले आदेशों के लिए पासवर्ड की आवश्यकता न हो। यह मेरे लिए सही प्रतीत नहीं होता है।फैब्रिक सूडो कोई पासवर्ड समाधान
उत्तर
Bartek भी पता चलता है, पासवर्ड से कम sudo सक्षम: समस्या सिर्फ पासवर्ड लिखने की रही है, तो एक विकल्प स्वचालित रूप से प्रवेश करने के लिए pexpect
मॉड्यूल का उपयोग कर, शायद एक पासवर्ड है कि आप एन्क्रिप्टेड संग्रहीत कर सकती है के साथ शामिल होगा sudoers फ़ाइल में तैनाती 'उपयोगकर्ता' के लिए।
कुछ की तरह:
run('echo "{0} ALL=(ALL) ALL" >> /etc/sudoers'.format(env.user))
यह दो कारणों से वास्तव में एक अच्छा तरीका नहीं है। सबसे पहले, यह आदेश चलाने पर हर बार इस लाइन को जोड़ देगा। दूसरा, sudoers फ़ाइल इस तरह से संशोधित करने के लिए नहीं है। अगर sudoers फ़ाइल में कोई त्रुटि है, तो आप मैन्युअल रूप से रूट पहुंच प्राप्त किए बिना फिर से sudo आदेश चलाने में सक्षम नहीं हो सकते हैं। –
मेरा जवाब पासवर्ड रहित सुडो सक्षम करना है। उपयोगकर्ता यह कैसे करता है एक और सवाल है, मैंने अभी एक विधि का सुझाव दिया है। और हां उपयोगकर्ता को आपके द्वारा बताए गए नुकसानों से अवगत होना चाहिए। –
sudo
जैसा लगता है कि यह सब के बाद एक विकल्प का बुरा नहीं हो सकता है। आप निर्दिष्ट कर सकते हैं कि उपयोगकर्ता कौन से आदेश और चला सकता है जो कमांड ले सकते हैं (man sudoers
)।
import pexpect, sys
pwd = getEncryptedPassword()
cmd = "yourcommand"
sCmd = pexpect.spawn('sudo {0}'.format(cmd))
sCmd.logfile_read = sys.stdout
sCmd.expect('Password:')
sCmd.sendline(pwd)
sCmd.expect(pexpect.EOF)
आप उपयोग कर सकते हैं:
fabric.api import env
# [...]
env.password = 'yourpassword'
ये सामान पासवर्ड प्रकट करने वाले वीसीएस में जाते हैं, कभी भी सबसे अच्छा विचार नहीं है, खासकर हम यहां सर्वर पासवर्ड के बारे में बात कर रहे हैं। –
आप एक से अधिक मशीनों के लिए पासवर्ड का उपयोग कर सकते हैं:
from fabric import env
env.hosts = ['[email protected]:port1', '[email protected]']
env.passwords = {'[email protected]:port1': 'password1', '[email protected]': 'password2'}
इस जवाब देखें: https://stackoverflow.com/a/5568219/552671
आदर्श समाधान आपके सर्वर पर उपयोगकर्ता बनाना है जिसका उपयोग केवल तैनाती के लिए किया जाता है (उदाहरण के लिए, deploy
)। फिर, अपने fabfile में env.user=deploy
सेट करें। फिर अपने सर्वर पर, आप उपयोगकर्ता एक आदेश-दर-आदेश के आधार पर आवश्यक अनुमति एक sudoers फाइल में दे सकते हैं:
महत्वपूर्ण: हमेशा एक sudoers फाइल को संशोधित करने के sudo visudo
का उपयोग
Cmnd_Alias RELOAD_SITE = /bin/bash -l -c supervisorctl*, /usr/bin/supervisorctl*
deploy ALL = NOPASSWD: RELOAD_SITE
आप तैनात उपयोगकर्ता द्वारा आवश्यक Cmnd_Alias
निर्देशों को जोड़ सकते हैं, फिर उन आदेशों में से प्रत्येक के लिए NOPASSWD
पहुंच प्रदान करें। अधिक जानकारी के लिए man sudoers
देखें। includedir /etc/suoders.d
अंत में:
मैं जोड़कर /etc/sudoers
से /etc/sudoers.d/deploy
में मेरी तैनाती विशेष sudoers config रखने के लिए और उस फ़ाइल को शामिल करना चाहते।
ऐसा करने का सबसे अच्छा तरीका subtasks के साथ है। आप fabfile में पासवर्ड पासवर्ड के लिए संकेत दे सकते हैं और कभी भी किसी भी पासवर्ड का पर्दाफाश नहीं कर सकते हैं, न ही रिमोट सिस्टम पर सुडौ में कॉन्फ़िगरेशन कॉन्फ़िगरेशन बदल सकते हैं।
import getpass
from fabric.api import env, parallel, run, task
from fabric.decorators import roles
from fabric.tasks import execute
env.roledefs = {'my_role': ['host1', 'host2']}
@task
# @parallel -- uncomment if you need parallel execution, it'll work!
@roles('my_role')
def deploy(*args, **kwargs):
print 'deploy args:', args, kwargs
print 'password:', env.password
run('echo hello')
@task
def prompt(task_name, *args, **kwargs):
env.password = getpass.getpass('sudo password: ')
execute(task_name, *args, role='my_role', **kwargs)
ध्यान दें कि आप भी समानांतर निष्पादन और prompt
कार्य के साथ इस गठजोड़ कर सकते हैं अभी भी केवल एक बार, जबकि deploy
कार्य भूमिका में प्रत्येक होस्ट के लिए चलाता है, समानांतर में चलाता है।
अंत में, आप इसे कैसे आह्वान का एक उदाहरण:
$ fab prompt:deploy,some_arg,another_arg,key=value
- 1. पासवर्ड टाइप किए बिना मैं फैब्रिक मनमानी सूडो कमांड कैसे चला सकता हूं?
- 2. फैब्रिक
- 3. फैब्रिक
- 4. फैब्रिक
- 5. फैब्रिक: स्थानीय कमांड उपयोग
- 6. फैब्रिक में उपयोगकर्ता से पासवर्ड प्राप्त करें, मूल्य
- 7. कठपुतली प्रकट - 'सूडो' आदेश?
- 8. रुडीगेम्स इंस्टॉलेशन त्रुटियों का उपयोग करते समय 'सूडो' और सूडो
- 9. कैप इनवोक और सूडो
- 10. एक सूडो कमांड
- 11. फैब्रिक त्रुटि लॉगर "paramiko.transport"
- 12. फैब्रिक स्थानीय कमांड
- 13. फैब्रिक - सुडो-यू
- 14. पाइथन की फैब्रिक लाइब्रेरी
- 15. "सूडो पॉड इंस्टॉल" पर त्रुटि
- 16. क्या उपयोगकर्ता इनपुट को 'सूडो' पासवर्ड इनपुट के रूप में अदृश्य बनाना संभव है?
- 17. नोडजेएस - कोई ई-कॉमर्स समाधान?
- 18. मैं Emacs में एक सूडो कमांड कैसे चला सकता हूं?
- 19. एकल सूडो कमांड के लिए लॉग प्रविष्टि को दबाएं
- 20. फैब्रिक हास्केल में बराबर है?
- 21. पासवर्ड
- 22. क्या कोई ओपन-सोर्स डीआरएम समाधान है?
- 23. सूचक-घटनाओं: कोई नहीं VML राफेल समाधान
- 24. समाधान
- 25. फैब्रिक अंततः प्रयास करने के बराबर
- 26. पाइथन लिपि के साथ फैब्रिक चलाना
- 27. समाधान
- 28. कपड़े में सूडो के रूप में निष्पादित करें
- 29. पासवर्ड सत्यापित नहीं कर रहा पासवर्ड/पासवर्ड पुष्टि
- 30. क्या जावास्क्रिप्ट में लिखे गए फैब्रिक के समान कोई परिनियोजन उपकरण है?
आप विशेष रूप से तैनात है, जो आदेशों आप sudo का उपयोग किए बिना चलाने की आवश्यकता की पहुंच है के लिए कोई नया उपयोगकर्ता जोड़ना पर गौर कर सकता है,। – Bartek