কীভাবে 'সুডো: কোনও টিটি উপস্থিত নেই এবং কোনও জিজ্ঞাসা কর্মসূচি নির্দিষ্ট নেই' ত্রুটি ঠিক করবেন?


438

আমি একটি মেকফিল ব্যবহার করে কিছু উত্স সংকলন করার চেষ্টা করছি। মেকফাইলে একটি গুচ্ছ কমান্ড রয়েছে যা চালানো দরকার sudo

আমি যখন কোনও টার্মিনাল থেকে উত্সগুলি সংকলন করি তখন সব ঠিক হয়ে যায় এবং প্রথমবার কোনও sudoকমান্ড পাসওয়ার্ডের জন্য অপেক্ষা করার পরে মেকটি বিরতি দেওয়া হয় । একবার আমি পাসওয়ার্ডটি টাইপ করি, পুনরায় শুরু করুন এবং সম্পূর্ণ করুন।

তবে আমি নেটবিনের উত্সগুলি সংকলন করতে সক্ষম হতে চাই। সুতরাং, আমি একটি প্রকল্প শুরু করেছি এবং নেটবিনগুলি দেখিয়েছি কোথায় উত্সগুলি পাওয়া যায়, তবে আমি প্রকল্পটি সংকলন করার সময় এটি ত্রুটি দেয়:

sudo: no tty present and no askpass program specified

প্রথমবার এটি কোনও sudoআদেশকে হিট করে ।

আমি ইন্টারনেটে সমস্যাটি খুঁজে পেয়েছি এবং আমি যে সমস্ত সমাধান পেয়েছি তার মধ্যে একটি বিষয় উল্লেখ করা হয়েছে: এই ব্যবহারকারীর জন্য পাসওয়ার্ড অক্ষম করা। যেহেতু এখানে প্রশ্নকারীর ব্যবহারকারী মূল। আমি এটা করতে চাই না।

অন্য কোন সমাধান আছে কি?


3
আমি একটি খেলনা অপারেটিং সিস্টেম সংকলন করছি। বুট সেক্টর সহ ভার্চুয়াল এইচডিডি সহ ভিএম সেটআপ করার জন্য আমার কিছু জিনিস করা দরকার।
হেবলো

1
আরও দেখুন stackoverflow.com/q/20248009/873282
koppor

সার্ভারফল্ট / এ / 597268 এ নির্দেশিত হিসাবে , sudo -n my-commandআমার জন্য কাজ করেছে। HIH!
andreyevbr

1
একটি উত্তর চয়ন করুন।
ইচিমারু

1
@ Andreyevbr- এ আমি ভাবি না। sudo: a password is required
ichimaru

উত্তর:


260

পাসওয়ার্ড না প্রেরিত ছাড়াই ব্যবহারকারীকে সেই আদেশটি ব্যবহার করতে দেওয়া সমস্যার সমাধান করা উচিত। প্রথমে একটি শেল কনসোল খুলুন এবং টাইপ করুন:

sudo visudo

তারপরে খুব শেষের দিকে যুক্ত করতে সেই ফাইলটি সম্পাদনা করুন:

username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand

যেমন

john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop

ব্যবহারকারী অনুমতি দেবে johnউবুন্টু থেকে poweroff, startএবং stopছাড়া পাসওয়ার্ড চাওয়া হচ্ছে।

ভিসুডোতে আপনাকে যে কীস্ট্রোকগুলি ব্যবহার করতে হবে তার জন্য পর্দার নীচের অংশটি দেখুন - এটি কোনওভাবেই vi নয় - এবং কোনও সমস্যার প্রথম চিহ্নটিতে সংরক্ষণ না করে প্রস্থান করুন। স্বাস্থ্য সতর্কতা: এই ফাইলটি দূষিত করার গুরুতর পরিণতি হবে, যত্ন সহকারে সম্পাদনা করুন!


4
হ্যাঁ, sudoers ম্যান পৃষ্ঠাটি আমার চোখ খুলেছে যে sudo আসলে কীভাবে ব্যবহার করা হবে বলে মনে করা হচ্ছে।
স্পেন্সার উইলিয়ামস

6
আপনার পরিবেশটি ব্যবহারের জন্য কনফিগার করা যা কিছু এডিটোরের মধ্যে ভিজোডোটি খুলতে হবে, যা খুব ভাল হতে পারে (এবং ^ _ ^ হওয়া উচিত) vi।
ম্যাট শৈলী

8
নিশ্চিত করুন যে NOPASSWD ম্যাথিং লাইনটি অন্য যে কোনও সুডো লাইনের পরে মিলছে (% চক্রের মতো) যেখানে NOPASSWD পতাকা নেই।
আনথনি

27
আমি "সুডো ভিসুডো" করতে পারি না কারণ আমি প্রথম জায়গায় সুডো করতে পারছি না!
গুব্যাট্রন

8
/Etc/sudoers.d এ একটি ফাইল যুক্ত করার এবং ভিজুডো ফাইলটি অচ্ছুত রেখে বিবেচনা করুন।
xlttj

183

চেষ্টা করুন:

  1. NOPASSWDসমস্ত আদেশের জন্য লাইন ব্যবহার করুন , আমি বলতে চাইছি:

    jenkins ALL=(ALL) NOPASSWD: ALL
    
  2. sudoersফাইলটিতে অন্যান্য সমস্ত লাইনের পরে লাইনটি রাখুন ।

এটি আমার পক্ষে কাজ করেছে (উবুন্টু 14.04)।


13
অন্যান্য ব্যবহারকারীর কনফিগারেশনের পরে আমি প্রথম লাইনটি যুক্ত করেছি, তবে লুবুন্টু 14.04.1 এ ফাইলটিতে একেবারে শেষ লাইন হিসাবে স্থাপন করা হলে এটি কাজ করে।
ব্যবহারকারী 77115

দ্বিতীয় অংশটি ছিল আমার যা সমাধান ছিল তা সমাধান। একটি বিদ্যমান কনফিগারেশন লাইন (হুইল গ্রুপের জন্য) আমার সুডোর কমান্ডের সাথেও মিলছে তবে NOPASSWD ছাড়াই: এন্ট্রি। আমার নতুন লাইনটিকে অগ্রাধিকার দেওয়ার পরে স্থাপন করা, আমার প্রয়োজনীয় নির্দিষ্ট কমান্ডের জন্য কোনও পাসওয়ার্ড ব্যবহারের অনুমতি না দেয়।
এন্থনি

5
@ ইউজার 7777১১৫ যেমন উল্লেখ করেছে, এটি কেবল তখনই কাজ করে যদি আপনি এটিকে উডুন্টু ১.0.০৪ সহ sudoers ফাইলে সর্বশেষ লাইন হিসাবে স্থাপন করেন। পার্শ্ব নোট হিসাবে, সমস্ত কমান্ডের জন্য জেনকিনগুলিকে সুডো অনুমতি দেওয়া একটি বিশাল সুরক্ষার উদ্বেগ is আপনার জেনকিন্স স্ক্রিপ্টগুলি মোড়ানো এবং কেবল নির্দিষ্ট আদেশগুলিতে কেবল অ্যাক্সেস দেওয়ার বিষয়ে বিবেচনা করুন: jenkins ALL=(ALL) NOPASSWD: /var/lib/jenkins/wrapper_script
আইভান্ডভ

jenkinsশুধু একটি ব্যবহারকারীর নাম? এটি হোস্ট মেশিন থেকে ব্যবহারকারীর নাম হতে হবে? হোস্ট মেশিনে ব্যবহারকারীর নাম যদি দূরবর্তী সার্ভার থেকে ব্যবহারকারীর নাম মেলে?
mrgloom

এটি জেনকিনস নির্দিষ্ট, দেখতে দেখতে স্ট্যাকওভারফ্লো.com/a/22651598/1041319 আরও সাধারণ সমাধান।
22:30 এ আর্টিং করুন

167

চেষ্টা করুন:

ssh -t remotehost "sudo <cmd>"

এটি উপরের ত্রুটিগুলি সরিয়ে ফেলবে।


7
-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machineআরও দেখুন: sudo-no-tty-present-no-Askpass-program-निर्दिष्ट এছাড়াও sudo -Aএকটি sudoজিজ্ঞাসা কর্মসূচি সেট করার অনুমতি দেয় , তবে আমি কেবল জিইআইআই দেখতে পাই see কেউ কি অনুমতি দেওয়ার জন্য কোনও জিজ্ঞাসাবাদকে জানেন ssh remotehost sudo -A askpass?
এখানে

1
সংশোধন, এর -Aজন্য sudoআর্গুমেন্ট গ্রহণ করে না এবং পরিবর্তে পরিবেশের প্রয়োজন হয় SUDO_ASKPASSবা sudo.conf সুতরাং ssh remotehost sudo -A commandএখনও কাজ করবে। টার্মিনাল ভিত্তিক জিজ্ঞাসা কর্মসূচি সম্পর্কে এখনও কৌতূহল।
এখানে

7
এটি আমার পক্ষে কাজ করে না (সম্ভবতঃ কারণ আমি স্ক্রিপ্ট থেকে Pseudo-terminal will not be allocated because stdin is not a terminal.
এসএসএস

আমার জন্য দুর্দান্ত কাজ করে ধন্যবাদ!
xfra35

1
এটি প্রশ্নের উত্তর দেয় না।
bschlueter

125

সমস্ত বিকল্পের পরেও, আমি খুঁজে পেয়েছি:

sudo -S <cmd>

-S (stdin) বিকল্পের ফলে টার্মিনাল ডিভাইসের পরিবর্তে স্ট্যান্ডার্ড ইনপুট থেকে পাসওয়ার্ডটি পড়তে sudo হয়।

সূত্র

উপরের কমান্ডটির এখনও প্রবেশের জন্য পাসওয়ার্ড প্রয়োজন। ম্যানুয়ালি পাসওয়ার্ড প্রবেশ করানো সরানোর জন্য, জেনকিন্সের মতো ক্ষেত্রে, এই কমান্ডটি কাজ করে:

echo <password> | sudo -S <cmd> 

এটি আমার সমস্যাটিকে সংশোধন করে। তবে এই কমান্ডটি ব্যবহার করে কি কোনও পার্শ্ব প্রতিক্রিয়া রয়েছে?
জিয়াওডং কিউ

3
sudo -S <command>- trueকেবল একটি ডামি কমান্ড হিসাবে দেখা যায় যা 0 এর একটি প্রস্থান কোড ফেরত দেয় ( falseএকটি আদেশ যা 1 প্রদান করে)। আপনাকে ধন্যবাদ, এটিই একটি সত্য উত্তর, যেহেতু অন্যরা "সুডো" কাজ করার প্রত্যাশা করে!
অ্যাডাম প্লোচার

1
-এস: স্ট্যান্ডার্ড ত্রুটিতে প্রম্পটটি লিখুন এবং টার্মিনাল ডিভাইসটি ব্যবহার না করে স্ট্যান্ডার্ড ইনপুট থেকে পাসওয়ার্ডটি পড়ুন। পাসওয়ার্ডটি অবশ্যই একটি নতুন লাইন অক্ষর দ্বারা অনুসরণ করা উচিত।
ফাইললিস্টার

এটি এই মুহুর্তে কাজ করে এবং একটি সময়সীমা অবধি sudo কাজ করতে পারে তবে অন্তর্নিহিত সমস্যাগুলি যে কোনও কারণেই থাকতে পারে না এবং সমস্যাটি ফিরে আসতে পারে।
nealmcb

আমি জানি না এটির কাজটি কিন্তু এটির প্রদর্শনী Password:তখন কিছুই হয় না। আমি পাসওয়ার্ড টাইপ করতে পারি না।
ichimaru

43

sudoডিফল্টরূপে সংযুক্ত টার্মিনাল থেকে পাসওয়ার্ড পড়বে। আপনার সমস্যাটি হ'ল নেটবিন্স কনসোল থেকে চালিত হওয়ার পরে কোনও টার্মিনাল সংযুক্ত নেই। সুতরাং আপনাকে পাসওয়ার্ড প্রবেশের বিকল্প উপায় ব্যবহার করতে হবে: এটিকে বলা হয় অ্যাসপাস প্রোগ্রাম।

Askpass প্রোগ্রাম একটি বিশেষ প্রোগ্রাম, কিন্তু কোনো প্রোগ্রাম যা একটি পাসওয়ার্ড জন্য অনুরোধ করতে পারেন না। উদাহরণস্বরূপ আমার সিস্টেমে x11-ssh-askpassসূক্ষ্মভাবে কাজ করে।

পরিবেশের পরিবর্তনশীল SUDO_ASKPASSবা sudo.confফাইলটিতে (প্রোগ্রামের man sudoজন্য বিশদটি দেখুন) আপনাকে কোন প্রোগ্রামটি ব্যবহার করতে হবে তা নির্দিষ্ট করতে হবে ।

আপনি sudoবিকল্পটি ব্যবহার করে জিজ্ঞাসাবাদ প্রোগ্রামটি ব্যবহার করতে বাধ্য করতে পারেন -A। ডিফল্টরূপে এটি কেবল তখনই ব্যবহার করবে যদি সংযুক্ত টার্মিনাল না থাকে।


বর্তমান সমাধানের জন্য একটি গিও প্রয়োজন। টার্মিনাল এ কি জিজ্ঞাসা কর্মসূচি কাজ করে।
এখানে

@ এখানে: আচ্ছা ... আপনি যদি টার্মিনাল থেকে এসএসএস চালনা করেন তবে এটি সরাসরি একটি পাসওয়ার্ড চাইবে, আপনার বিশেষ কিছু প্রয়োজন নেই ... অথবা আপনি যে পাসওয়ার্ডটি চান তার চেয়ে আলাদা টার্মিনাল থেকে পাসওয়ার্ডের অনুরোধ করার বিষয়ে জিজ্ঞাসা করছেন ssh অধিবেশন চালাবেন?
রডরিগো

1
আহ এখন আমি দেখছি যে -Aআর্গুমেন্ট গ্রহণ করে না। -Aপরিবেশ SUDO_ASKPASSবা sudo.confফাইল দরকার। সেক্ষেত্রে, ssh host "export SUDO_ASKPASS=askpass;sudo -A cat /etc/passwd"would এখনও একটি টার্মিনাল ভিত্তিক askpass সঙ্গে কাজ, কিন্তু @chandru সঙ্গে নিচে অনেক বেশী সংক্ষিপ্ত হয়ssh -t ...
এখানে

-এ ব্যবহার করে কিছু ক্যাভ্যাট রয়েছে। প্রথমত, যদি -A ব্যবহার করা হয় এবং SUDO_ASKPASS সেট না করা থাকে আপনি একটি ত্রুটি পাবেন। দ্বিতীয়ত, যখন -S ব্যবহৃত হয় তখন ক্যাশযুক্ত শংসাপত্রগুলি ব্যবহার করবে না, এটি সর্বদা একটি পাসওয়ার্ডের জন্য অনুরোধ করবে।
অ্যান্থনি

একটি adendum হিসাবে আপনি পাসওয়ার্ড ইনপুট প্রোগ্রাম আমার নোট তাকান পছন্দ করতে পারেন ... ict.griffith.edu.au/anthony/info/crypto/passwd_input.txt
এন্থনি

26

উবুন্টু 16.04 ব্যবহারকারীদের জন্য

আপনার সাথে পড়তে হবে এমন একটি ফাইল রয়েছে:

cat /etc/sudoers.d/README

নিম্নলিখিত বিষয়বস্তু সহ /etc/sudoers.d/myuser এ 0440 মোডের সাথে একটি ফাইল স্থাপন করা:

myuser  ALL=(ALL) NOPASSWD: ALL

সমস্যাটি ঠিক করা উচিত।

ভুলো না:

chmod 0440 /etc/sudoers.d/myuser

খুশী হলাম। জনপ্রিয় একের চেয়ে পরিষ্কার সমাধান solution
পল প্রেট 8

2
এটিকে অন্ধভাবে অনুসরণ করবেন না। আমি এখানে বর্ণিত হিসাবে /etc/sudoers.d এ একটি নতুন ফাইল তৈরি করেছি এবং সুডো আর ব্যবহার করতে সক্ষম না হয়ে শেষ হয়েছি .. পুনরুদ্ধারের মোডের মাধ্যমে ফাইলটি মুছতে হয়েছিল।
স্টায়ান

25

আর একবার চেষ্টা কর:

echo '' | sudo -S my_command

এটি আমার পক্ষে কাজ করে, তবে কেউ কেন এটি সাহায্য করে তা ব্যাখ্যা করতে পারে?
ওলোলোবাস

@ololobus আপনি প্রথমে পাসওয়ার্ড প্রবেশের জন্য একটি খালি পাসওয়ার্ড প্রেরণ করুন
নিকিতা কোকশারভ

কাজ করছে! উচ্চতর রেট দেওয়া উত্তরগুলির মধ্যে আমার পক্ষে এটি সমাধান হয়নি solved
DDDD

1
: এটা ত্রুটি নিম্নলিখিত ফেরৎ [sudo] password for alper: Sorry, try again. [sudo] password for alper: sudo: 1 incorrect password attempt @sNICkerssss
Alper

16

যদি কোনও সুযোগে আপনি এখানে এসেছিলেন কারণ উইন্ডোজ 10 এর সাথে আগত উবুন্টুর ভিতরে আপনি সুডো করতে পারবেন না

  1. উইন্ডোজ (নোটপ্যাড সহ) থেকে / ইত্যাদি / হোস্ট ফাইল সম্পাদনা করুন, এটি এখানে অবস্থিত হবে:, %localappdata\lxss\rootfs\etcযোগ করুন 127.0.0.1 WINDOWS8, এটি হোস্টটি খুঁজে পাবে না এমন প্রথম ত্রুটি থেকে মুক্তি পাবে।

  2. no tty presentত্রুটি থেকে মুক্তি পেতে সর্বদা করুনsudo -S <command>


2
প্রশ্ন বর্ণনার সাথে সম্পর্কিত নয়, তবে প্রশ্নের শিরোনামের সাথে মিলেছে এমন কারণে এখানে আসা লোকদের উত্তর দেওয়ার জন্য ধন্যবাদ। +1
জয়ন্ত ভাওয়াল


15

আপনার লিনাক্সে লগইন করুন। কমান্ডগুলি ফায়ার করুন। সাবধানতা অবলম্বন করুন, হিসাবে sudoer সম্পাদনা একটি ঝুঁকিপূর্ণ প্রস্তাব।

$ sudo visudo

একবার vi সম্পাদক খুললে নিম্নলিখিত পরিবর্তনগুলি করুন:

  1. মন্তব্য Defaults requiretty

    # Defaults    requiretty
    
  2. ফাইলটির শেষে যান এবং অ্যাড করুন

    jenkins ALL=(ALL) NOPASSWD: ALL
    


11

এটি আমার পক্ষে কাজ করেছে:

echo "myuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

যেখানে আপনার ব্যবহারকারী "মাইউসার"

ডকার চিত্রের জন্য, এটি কেবলমাত্র হবে:

RUN echo "myuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

9

নিশ্চিত হয়ে নিন যে আপনি যে কমান্ডটি করছেন sudoসেটি আপনার অংশ PATH

আপনার যদি একটি একক (বা একাধিক, তবে সমস্ত নয়) কমান্ড sudoersএন্ট্রি থাকে, আপনি sudo: no tty present and no askpass program specifiedযখন কমান্ডটি আপনার পথের অংশ না হয়ে থাকে (এবং পুরো পথটি নির্দিষ্ট করা হয়নি) আপনি পেয়ে যাবেন ।

আপনি নিজের কমান্ড যুক্ত করে PATHবা এটি একটি পরম পথের সাহায্যে অনুরোধ করে ঠিক করতে পারেন , অর্থাত্‍

sudo /usr/sbin/ipset

পরিবর্তে

sudo ipset


1
এটি আসলে আমার জন্য কাঁটাযুক্ত। ইন sudoers %sitd ALL=(lamparna) NOPASSWD: /usr/bin/git_push_to_lamparna.sh, /usr/bin/gitএবং sudo -u lamparna git push --mirror ssh://lamparna@REDMINE/home/lamparna/repos/git/jine/lamparna.gitগিট পোস্ট-আপডেট হুক রিটার্নে no ttyব্যবহার করে তবে sudo -u lamparna /usr/bin/git push --mirror ssh://lamparna@REDMINE/home/lamparna/repos/git/jine/lamparna.gitপাসওয়ার্ড ছাড়াই কাজ ব্যবহার করে ।
ফোটন

7

কমান্ডটি sudoব্যর্থ হয়েছে কারণ এটি রুট পাসওয়ার্ডে প্রম্পট দেওয়ার চেষ্টা করছে এবং সেখানে কোনও সিউডো-টিটি বরাদ্দ নেই (এটি স্ক্রিপ্টের অংশ হিসাবে)।

এই কমান্ডটি চালনার জন্য আপনাকে রুট হিসাবে লগ-ইন করতে হবে /etc/sudoers বা আপনার (বা sudo visudo:) এ নিম্নলিখিত বিধিগুলি সেট আপ করতে হবে :

# Members of the admin group may gain root privileges.
%admin  ALL=(ALL) NOPASSWD:ALL

তারপরে নিশ্চিত হয়ে নিন যে আপনার ব্যবহারকারী adminগ্রুপ (বা wheel) এর অন্তর্গত ।

আদর্শভাবে (নিরাপদ) এটির জন্য নির্দিষ্ট বৈশিষ্ট্যগুলি কেবলমাত্র নির্দিষ্ট আদেশগুলিতে সীমাবদ্ধ করা হবে %admin ALL=(ALL) NOPASSWD:/path/to/program


আমি জানি, এটি করার অনেক বেশি নিরাপদ উপায়। যদিও, আমি নিম্নলিখিত কমান্ডটি sudoersফাইলটিতে লিখেছি apache ALL = (ALL) NOPASSWD:/usr/share/apache-tomcat-7.0.61/bin/startup.shতবে এটি আমার পক্ষে কার্যকর হয় না। এটি নিম্নলিখিত ত্রুটিটি দেয়sudo: >>> /etc/sudoers: syntax error near line 120 <<< sudo: parse error in /etc/sudoers near line 120 sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin
মুয়াজ

1
বিটিডাব্লু, এটি কার্যকরভাবে কাজ করে apache ALL=(ALL) NOPASSWD: ALLতবে একটি সুরক্ষা ঝুঁকিপূর্ণ। :)
মুয়াজ

6

আমি মনে করি আমি আমার কেস কে সাহায্য করতে পারি।

প্রথমত, আমি /etc/sudoersউপরের উত্তরের উল্লেখ করে ব্যবহারকারীর সেটিংস পরিবর্তন করেছি । তবে এটি এখনও কার্যকর হয়নি।

myuser   ALL=(ALL) NOPASSWD: ALL
%mygroup  ALL=(ALL:ALL) ALL

আমার ক্ষেত্রে, myuserছিল mygroup

এবং আমার গোষ্ঠী দরকার ছিল না। সুতরাং, যে লাইন মুছে ফেলা।

(আমার মত লাইনটি মুছে ফেলা উচিত নয়, কেবল মন্তব্যটি চিহ্নিত করা।)

myuser   ALL=(ALL) NOPASSWD: ALL

এটি কাজ করে!


3

জেনকিন্স থেকে সুডো কমান্ড থাকা শেল স্ক্রিপ্টগুলি চালানো প্রত্যাশার মতো চলতে পারে না। এটি ঠিক করতে, পাশাপাশি অনুসরণ করুন

সাধারণ পদক্ষেপ:

  1. উবুন্টু ভিত্তিক সিস্টেমে "$ sudo visudo" চালান

  2. এটি / etc / sudoers ফাইল খুলবে।

  3. যদি আপনার জেনকিন্স ব্যবহারকারী ইতিমধ্যে সেই ফাইলে থাকে তবে তার মতো দেখতে পরিবর্তন করুন:

জেনকিনস সমস্ত = (সমস্ত) নোপাএসডাব্লুডি: সমস্ত

  1. ফাইল সংরক্ষণ করুন

  2. আপনার জেনকিন্স কাজটি আবার চালু করুন

  3. আপনি আবার ত্রুটি বার্তা দেখতে পাওয়া উচিত নয় :)


3

আমি এটি সম্পন্ন করতে সক্ষম হয়েছি তবে দয়া করে পদক্ষেপগুলি যথাযথভাবে অনুসরণ করা নিশ্চিত করুন। এটি যে কারও জন্য আমদানি ত্রুটি পাচ্ছে for

পদক্ষেপ 1 : ফাইল এবং ফোল্ডারগুলি অনুমতি ইস্যু কার্যকর করতে পারে কিনা তা পরীক্ষা করুন। লিনাক্স ব্যবহারকারীদের ব্যবহার:

chmod 777 filename

Step2 : চেক যা ব্যবহারকারী এটিকে চালানো করার অনুমতি রয়েছে।

স্টিপি 3 : ওপেন টার্মিনালটি এই আদেশটি টাইপ করুন।

sudo visudo

নীচের কোডটিতে এই লাইনগুলি যুক্ত করুন

www-data ALL=(ALL) NOPASSWD:ALL
nobody ALL=(ALL) NOPASSWD:/ALL

এটি হ'ল স্ক্রিপ্টটি কার্যকর করার অনুমতি প্রদান এবং এটি সমস্ত লাইব্রেরি ব্যবহার করার অনুমতি দেয়। ব্যবহারকারী সাধারণত 'কেউ না' বা 'www-ডেটা' হয়।

এখন আপনার কোড হিসাবে সম্পাদনা করুন

echo shell_exec('sudo -u the_user_of_the_file python your_file_name.py 2>&1');

প্রক্রিয়াটি এখানে চলছে কিনা তা পরীক্ষা করতে টার্মিনালে যান ...

ps aux | grep python

এটি পাইথন চলমান সমস্ত প্রক্রিয়া আউটপুট দেবে।

অনগুলি যুক্ত করুন : আপনার সিস্টেমের ব্যবহারকারীদের পরীক্ষা করতে নীচের কোডটি ব্যবহার করুন

cut -d: -f1 /etc/passwd

ধন্যবাদ!


2

আপনি যখন কোনও শেল নন-স্ক্রিপ্ট থেকে টার্মিনাল কমান্ড (যার জন্য রুট পাসওয়ার্ড প্রয়োজন) চালানোর চেষ্টা করছেন, ততক্ষণে এই ত্রুটিটি দেখা দিতে পারে, যেমন sudo ls(রুবি প্রোগ্রাম থেকে) ব্যাকটিক্সে)। এই ক্ষেত্রে, আপনি প্রত্যাশা ইউটিলিটি ( http://en.wikedia.org/wiki/Expect ) বা এর বিকল্পগুলি ব্যবহার করতে পারেন ।
উদাহরণস্বরূপ, রুবি sudo lsনা পেয়ে এক্সিকিউট sudo: no tty present and no askpass program specifiedকরতে, আপনি এটি চালাতে পারেন:

require 'ruby_expect'

exp = RubyExpect::Expect.spawn('sudo ls', :debug => true)
exp.procedure do
    each do
        expect "[sudo] password for _your_username_:" do
            send _your_password_
        end
    end
end

[এটি টিসিএল সম্প্রসারণ প্রত্যাশার বিকল্পগুলির মধ্যে একটির ব্যবহার করে : রুবি_ এক্সপেক্ট রত্ন]।


2

রেফারেন্সের জন্য, অন্য কেউ যদি একই সমস্যার মুখোমুখি হয় তবে আমি এই ত্রুটিটি নিয়ে একটি ভাল সময়ের মধ্যে আটকে ছিলাম যা NOPASSWD প্যারামিটারটি ব্যবহার করার পরে ঘটবে না।

আমি যা জানতাম না তা হল যে কোনও টাইটি না থাকলে sudo সঠিক একই ত্রুটি বার্তা উত্থাপন করতে পারে এবং ব্যবহারকারী যে কমান্ডটি চালু করতে চেষ্টা করে তা / etc / sudoers ফাইলের অনুমোদিত কমান্ডের অংশ নয়।

আমার সমস্যা সহ আমার ফাইল সামগ্রীর একটি সরল উদাহরণ এখানে:

bguser ALL = NOPASSWD: \
    command_a arg_a, \
    command_b arg_b \
    command_c arg_c

যখন বুগুজার কোনও tty ছাড়াই "sudo কমান্ড_বি আরজি_বি" চালু করার চেষ্টা করবে (কিছু ডেমনের জন্য বগুজার ব্যবহার করা হবে), তখন সে ত্রুটির মুখোমুখি হবে "কোন টিটি উপস্থিত নেই এবং কোন জিজ্ঞাসা কর্মসূচি নির্দিষ্ট নেই"।

কেন?

কারণ / ইত্যাদি / সুডোর ফাইলটিতে লাইনের শেষে একটি কমা নিখোঁজ রয়েছে ...

(আমি এমনকি আশ্চর্যও হয়েছি যে এটি যদি একটি প্রত্যাশিত আচরণ হয় এবং sudo তে কোনও বাগ না হয় তবে এ জাতীয় ক্ষেত্রে সঠিক ত্রুটি বার্তাটি "দুঃখিত, ব্যবহারকারী বুগেসার কার্যকর করার অনুমতি নেই") হতে হবে)


2

আমি এই ত্রুটিটি পাচ্ছিলাম কারণ আমি আমার ব্যবহারকারীকে কেবলমাত্র একটি এক্সিকিউটেবল 'সিস্টেমটেক্টল'-এ সীমাবদ্ধ রেখেছি এবং ভিজুডো ফাইলটির ভুল কনফিগার করেছি।

আমার যা ছিল তা এখানে:

jenkins ALL=NOPASSWD: systemctl

তবে আপনাকে এক্সিকিউটেবলের পুরো পথটি অন্তর্ভুক্ত করতে হবে, এটি ডিফল্টরূপে আপনার পথে থাকলেও:

jenkins ALL=NOPASSWD: /bin/systemctl

এটি আমার জেনকিন্স ব্যবহারকারীদের পরিষেবাগুলি পুনরায় চালু করতে দেয় তবে সম্পূর্ণ রুট অ্যাক্সেস পায় না


1

এই হোস্টটির কারণ কী হতে পারে তা কেউ জানায় নি, এক হোস্ট থেকে অন্য হোস্টে স্থানান্তরিত হওয়ার ক্ষেত্রে sudoers ফাইলে হোস্ট-নেম চেক করার বিষয়ে মনে রাখবেন:

সুতরাং এটি আমার / ইত্যাদি / sudoers কনফিগারেশন

User_Alias      POWERUSER = user_name
Cmnd_Alias SKILL = /root/bin/sudo_auth_wrapper.sh
POWERUSER hostname=(root:root) NOPASSWD: SKILL

যদি এটি মেলে না

uname -a
Linux other_hostname 3.10.17 #1 SMP Wed Oct 23 16:28:33 CDT 2013 x86_64 Intel(R) Core(TM) i3-4130T CPU @ 2.90GHz GenuineIntel GNU/Linux

এটি এই ত্রুটিটি পপআপ করবে:

কোন tty উপস্থিত এবং কোন জিজ্ঞাসা প্রোগ্রাম নির্দিষ্ট করা হয়নি


1

অন্যান্য বিকল্পগুলি, NOPASSWD এর উপর ভিত্তি করে নয়:

  • মূল অধিকার ((সুডো নেটবিয়ান) বা অনুরূপ) দিয়ে নেটবিনগুলি শুরু করুন যা সম্ভবত বিল্ড প্রক্রিয়াটিকে রুট দিয়ে কাঁটাবে এবং এভাবে সুডো স্বয়ংক্রিয়ভাবে সফল হবে।
  • আপনাকে suexec করার জন্য প্রয়োজনীয় ক্রিয়াকলাপগুলি তৈরি করুন - এগুলি রুটের মালিকানাধীন করুন, এবং মোডটি 4755 এ সেট করুন (
  • বুটসেক্টরগুলির সাহায্যে ভার্চুয়াল হার্ড ডিস্ক ফাইলগুলি তৈরি করার জন্য সুডোর মোটেই প্রয়োজন হবে না। ফাইলগুলি কেবল ফাইল এবং বুটসেক্টরগুলি কেবল ডেটা। এমনকি ভার্চুয়াল মেশিনের অবশ্যই মূলের প্রয়োজন হবে না, যদি না আপনি উন্নত ডিভাইস ফরোয়ার্ডিং করেন।

1

সম্ভবত প্রশ্নটি অস্পষ্ট যে কোনও উত্তর কেন এটির সাথে মিলছে না তবে যখন আমি এসএসএফএস মাউন্ট করার চেষ্টা করছিলাম যা সুডোর প্রয়োজন ছিল তখন আমার একই ত্রুটি বার্তা ছিল: কমান্ডটি এরকম কিছু:

sshfs -o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server" user@my.server.tld:/var/www /mnt/sshfs/www

বিকল্প যুক্ত করে -o debug

sshfs -o debug -o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server" user@my.server.tld:/var/www /mnt/sshfs/www

আমার এই প্রশ্নের একই বার্তা ছিল:

sudo: no tty present and no askpass program specified

সুতরাং অন্যের উত্তর পড়ে আমি /etc/sudoer.d/userআমার.সভার.টিলেডে একটি ফাইল তৈরি করতে সক্ষম হয়েছি:

user ALL=NOPASSWD: /usr/lib/openssh/sftp-server

এবং এখন আমি আমার ব্যবহারকারীর অতিরিক্ত অতিরিক্ত অধিকার না দিয়ে ড্রাইভটি মাউন্ট করতে সক্ষম হয়েছি।


0

যদিও এই প্রশ্নটি পুরানো, এটি এখনও আমার কম-বেশি আপ-টু-ডেট সিস্টেমের জন্য প্রাসঙ্গিক। Sudo ( Debug sudo /var/log/sudo_debug all@infoইন /etc/sudo.conf) এর ডিবাগ মোড সক্ষম করার পরে আমাকে / dev: " /dev is world writable" নির্দেশ করা হয়েছিল । সুতরাং আপনার tty ফাইলের অনুমতিগুলি পরীক্ষা করতে হবে , বিশেষত ডিরেক্টরিতে যেখানে tty / pts নোড থাকে।


0

যদি আপনি এই লাইনটি আপনার /etc/sudoers(এর মাধ্যমে visudo) যুক্ত করেন তবে এটি আপনার পাসওয়ার্ডটি প্রবেশ করানো অক্ষম না করে এবং যখন কোনও উপাধি sudo -Sকাজ করবে না (স্ক্রিপ্ট কল করা sudo): এই সমস্যাটি সমাধান করবে :

Defaults visiblepw

ম্যানুয়ালটি অবশ্যই এটি বুঝতে নিজে পড়ুন , তবে আমি মনে করি এটি একটি এলএক্সডি ধারকটিতে চালানোর ক্ষেত্রে আমার ব্যবহারের ক্ষেত্রে lxc exec instance -- /bin/bashএটি নিরাপদ হয়ে যায় কারণ এটি কোনও নেটওয়ার্কের মাধ্যমে পাসওয়ার্ড মুদ্রণ করে না।


0

পাইপলাইন ব্যবহার:

echo your_pswd | sudo -S your_cmd

এখানে-নথি ব্যবহার:

sudo -S cmd <<eof
pwd
eof
#remember to put the above two lines without "any" indentations.

পাসওয়ার্ড জিজ্ঞাসা করার জন্য একটি টার্মিনাল খুলুন (যে কোনও কাজ করে):

gnome-terminal -e "sudo cmd"
xterm -e "sudo cmd"

-1

1 টি খোলা / ইত্যাদি / sudoers

প্রকার sudo vi /etc/sudoers। এটি আপনার ফাইলটি সম্পাদনা মোডে খুলবে।

2 লিনাক্স ব্যবহারকারী যুক্ত / সংশোধন করুন

লিনাক্স ব্যবহারকারীর জন্য প্রবেশের সন্ধান করুন। নীচের হিসাবে সংশোধন করুন পাওয়া গেলে বা একটি নতুন লাইন যুক্ত করুন

<USERNAME> ALL=(ALL) NOPASSWD: ALL

3 সম্পাদনা মোড থেকে সংরক্ষণ করুন এবং প্রস্থান করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.