How to make passwordless switch to another user in a shell script

CodingInCircles picture CodingInCircles · Dec 8, 2013 · Viewed 20k times · Source

I want to su from hadoopmaster to hduser. When I do it on the terminal, I do:

su - hduser

which then asks me for the password and I enter it and I get in to hduser. How can I do the same in a shell script without having to worry about the password? I tried the sudoers file method where I put:

root ALL=(ALL:ALL) ALL
hduser ALL=(ALL:ALL) ALL
hadoopmaster ALL=(ALL:ALL) NOPASSWD: /bin/su hduser 
(here I tried different combinations of the line with and without the '-' and also 
with and without /bin)

I did this and when I do su hduser or su - hduser, it prompts me for the password again. What do I do?

Answer

Jim Nutt picture Jim Nutt · Dec 8, 2013

You don't use "su" with the sudoers file, you need to use "sudo". So, you'd want a command line like:

sudo su - hduser

which would do want you want, provided you had the appropriate lines in the sudoers file. A line like this:

hadoopmaster ALL=(ALL:ALL) NOPASSWD: su - hduser

should do the trick.