sudo
স্রেফ ব্যবহার করে লগইন শেলটি চাওয়ার জন্য -i
। কমান্ড নির্দিষ্ট করা না হলে আপনি লগইন শেল প্রম্পট পাবেন, অন্যথায় আপনি আপনার কমান্ডের আউটপুট পাবেন।
উদাহরণ (লগইন শেল):
sudo -i
উদাহরণ (একটি নির্দিষ্ট ব্যবহারকারীর সাথে):
sudo -i -u user
উদাহরণ (একটি আদেশ সহ):
sudo -i -u user whoami
উদাহরণ (মুদ্রণ ব্যবহারকারীদের $HOME
):
sudo -i -u user echo \$HOME
দ্রষ্টব্য: ব্যাকস্ল্যাশ অক্ষরটি নিশ্চিত করে যে ডলারের চিহ্নটি ব্যবহারকারীর শেলের কাছে পৌঁছেছে এবং কলিং ব্যবহারকারীর শেলটিতে তা ব্যাখ্যা করা যায় না।
আমি কেবল স্ট্রেসের সাথে শেষ উদাহরণটি যাচাই করেছিলাম যা আপনাকে যা ঘটছে ঠিক তা বলে। আউটপুট বেলো দেখায় যে শেলটি --login
নির্দিষ্ট কমান্ডের সাথে এবং তার সাথে ডেকে পাঠানো হচ্ছে ঠিক যেমন আপনার ব্যাশে স্পষ্ট কল হিসাবে, তবে অতিরিক্তভাবে sudo সেট করার মতো নিজস্ব কাজও করতে পারে $HOME
।
# strace -f -e process sudo -S -i -u user echo \$HOME
execve("/usr/bin/sudo", ["sudo", "-S", "-i", "-u", "user", "echo", "$HOME"], [/* 42 vars */]) = 0
...
[pid 12270] execve("/bin/bash", ["-bash", "--login", "-c", "echo \\$HOME"], [/* 16 vars */]) = 0
...
আমি লক্ষ্য করেছি যে আপনি ব্যবহার করছেন -S
এবং আমি সাধারণত এটি একটি ভাল কৌশল বলে মনে করি না। আপনি যদি কীবোর্ড থেকে প্রমাণীকরণ না করে ভিন্ন ব্যবহারকারী হিসাবে কমান্ডগুলি চালাতে চান তবে আপনি পরিবর্তে এসএসএইচ ব্যবহার করতে চাইতে পারেন। এটি localhost
অন্যান্য হোস্টের জন্যও কাজ করে এবং সর্বজনীন কী প্রমাণীকরণ সরবরাহ করে যা কোনও ইন্টারেক্টিভ ইনপুট ছাড়াই কাজ করে।
ssh user@localhost echo \$HOME
দ্রষ্টব্য: এসএসএইচ সহ আপনার কোনও বিশেষ বিকল্পের প্রয়োজন নেই কারণ এসএসএইচ সার্ভার সর্বদা এসএসএইচ ক্লায়েন্টের অ্যাক্সেসের জন্য লগইন শেল তৈরি করে।