Linux switch user and execute command immediately

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
4
down vote

favorite
1












I have a scenario where I have to switch to the different user and after that, I need to execute the some Linux command.



my command is something like this



( echo myPassword | sudo -S su hduser ) && bash /usr/local/hadoop/sbin/start-dfs.sh


but with this command, I switch to the user and the next command got triggered on the previous user.



Is there any I can accomplish this using shell script










share|improve this question

















  • 6




    Be aware that this command saves your password in cleartext in your bash history file.
    – spectras
    Sep 26 '17 at 8:47














up vote
4
down vote

favorite
1












I have a scenario where I have to switch to the different user and after that, I need to execute the some Linux command.



my command is something like this



( echo myPassword | sudo -S su hduser ) && bash /usr/local/hadoop/sbin/start-dfs.sh


but with this command, I switch to the user and the next command got triggered on the previous user.



Is there any I can accomplish this using shell script










share|improve this question

















  • 6




    Be aware that this command saves your password in cleartext in your bash history file.
    – spectras
    Sep 26 '17 at 8:47












up vote
4
down vote

favorite
1









up vote
4
down vote

favorite
1






1





I have a scenario where I have to switch to the different user and after that, I need to execute the some Linux command.



my command is something like this



( echo myPassword | sudo -S su hduser ) && bash /usr/local/hadoop/sbin/start-dfs.sh


but with this command, I switch to the user and the next command got triggered on the previous user.



Is there any I can accomplish this using shell script










share|improve this question













I have a scenario where I have to switch to the different user and after that, I need to execute the some Linux command.



my command is something like this



( echo myPassword | sudo -S su hduser ) && bash /usr/local/hadoop/sbin/start-dfs.sh


but with this command, I switch to the user and the next command got triggered on the previous user.



Is there any I can accomplish this using shell script







shell-script ubuntu






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Sep 26 '17 at 5:23









Akash Sethi

130116




130116







  • 6




    Be aware that this command saves your password in cleartext in your bash history file.
    – spectras
    Sep 26 '17 at 8:47












  • 6




    Be aware that this command saves your password in cleartext in your bash history file.
    – spectras
    Sep 26 '17 at 8:47







6




6




Be aware that this command saves your password in cleartext in your bash history file.
– spectras
Sep 26 '17 at 8:47




Be aware that this command saves your password in cleartext in your bash history file.
– spectras
Sep 26 '17 at 8:47










3 Answers
3






active

oldest

votes

















up vote
10
down vote



accepted










Try.



sudo -H -u TARGET_USER bash -c 'bash /usr/local/hadoop/sbin/start-dfs.sh' 


or if you want pass with password.



echo TARGET_USER_PASS | sudo -S -H -u TARGET_USER bash -c 'bash /usr/local/hadoop/sbin/start-dfs.sh'


see man sudo:




-H



The -H (HOME) option requests that the security policy set the HOME
environment variable to the home directory of the target user (root by
default) as specified by the password database. Depending on the
policy, this may be the default behavior.



-u user



The -u (user) option causes sudo to run the specified command as a
user other than root. To specify a uid instead of a user name, use #uid.
When running commands as a uid, many shells require that the '#' be
escaped with a backslash (''). Security policies may restrict uids to
those listed in the password database. The sudoers policy allows uids
that are not in the password database as long as the targetpw option is
not set. Other security policies may not support this.







share|improve this answer


















  • 3




    Why ... bash -c 'bash file.sh'? Couldn't you write it as ... bash file.sh?
    – user000001
    Sep 26 '17 at 10:53


















up vote
2
down vote













With su user -c "sh /path/command.sh" you can run a command as user.



I tested with this command:



 echo myPassword | sudo -S su - foobar -c "/usr/bin/watch -n 1 cat /etc/resolv.conf"


After that the watch -n was running as foobar.



So I think your command should work like that:



echo myPassword | sudo -S su - hduser -c "bash /usr/local/hadoop/sbin/start-dfs.sh"





share|improve this answer




















  • Your answer is also correct Thanks
    – Akash Sethi
    Sep 26 '17 at 8:17


















up vote
1
down vote













You could try this one:




pkexec - Execute a command as another user



pkexec [--user username] PROGRAM [ARGUMENTS...]







share|improve this answer




















  • tested on my site. But if no home dir exists, then there is an error Error changing to home directory /home/foobar: No such file or directory. I created it, but perhaps there is a better solution without home folder
    – chloesoe
    Sep 26 '17 at 10:11










Your Answer







StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
convertImagesToLinks: false,
noModals: false,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













 

draft saved


draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f394461%2flinux-switch-user-and-execute-command-immediately%23new-answer', 'question_page');

);

Post as a guest






























3 Answers
3






active

oldest

votes








3 Answers
3






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
10
down vote



accepted










Try.



sudo -H -u TARGET_USER bash -c 'bash /usr/local/hadoop/sbin/start-dfs.sh' 


or if you want pass with password.



echo TARGET_USER_PASS | sudo -S -H -u TARGET_USER bash -c 'bash /usr/local/hadoop/sbin/start-dfs.sh'


see man sudo:




-H



The -H (HOME) option requests that the security policy set the HOME
environment variable to the home directory of the target user (root by
default) as specified by the password database. Depending on the
policy, this may be the default behavior.



-u user



The -u (user) option causes sudo to run the specified command as a
user other than root. To specify a uid instead of a user name, use #uid.
When running commands as a uid, many shells require that the '#' be
escaped with a backslash (''). Security policies may restrict uids to
those listed in the password database. The sudoers policy allows uids
that are not in the password database as long as the targetpw option is
not set. Other security policies may not support this.







share|improve this answer


















  • 3




    Why ... bash -c 'bash file.sh'? Couldn't you write it as ... bash file.sh?
    – user000001
    Sep 26 '17 at 10:53















up vote
10
down vote



accepted










Try.



sudo -H -u TARGET_USER bash -c 'bash /usr/local/hadoop/sbin/start-dfs.sh' 


or if you want pass with password.



echo TARGET_USER_PASS | sudo -S -H -u TARGET_USER bash -c 'bash /usr/local/hadoop/sbin/start-dfs.sh'


see man sudo:




-H



The -H (HOME) option requests that the security policy set the HOME
environment variable to the home directory of the target user (root by
default) as specified by the password database. Depending on the
policy, this may be the default behavior.



-u user



The -u (user) option causes sudo to run the specified command as a
user other than root. To specify a uid instead of a user name, use #uid.
When running commands as a uid, many shells require that the '#' be
escaped with a backslash (''). Security policies may restrict uids to
those listed in the password database. The sudoers policy allows uids
that are not in the password database as long as the targetpw option is
not set. Other security policies may not support this.







share|improve this answer


















  • 3




    Why ... bash -c 'bash file.sh'? Couldn't you write it as ... bash file.sh?
    – user000001
    Sep 26 '17 at 10:53













up vote
10
down vote



accepted







up vote
10
down vote



accepted






Try.



sudo -H -u TARGET_USER bash -c 'bash /usr/local/hadoop/sbin/start-dfs.sh' 


or if you want pass with password.



echo TARGET_USER_PASS | sudo -S -H -u TARGET_USER bash -c 'bash /usr/local/hadoop/sbin/start-dfs.sh'


see man sudo:




-H



The -H (HOME) option requests that the security policy set the HOME
environment variable to the home directory of the target user (root by
default) as specified by the password database. Depending on the
policy, this may be the default behavior.



-u user



The -u (user) option causes sudo to run the specified command as a
user other than root. To specify a uid instead of a user name, use #uid.
When running commands as a uid, many shells require that the '#' be
escaped with a backslash (''). Security policies may restrict uids to
those listed in the password database. The sudoers policy allows uids
that are not in the password database as long as the targetpw option is
not set. Other security policies may not support this.







share|improve this answer














Try.



sudo -H -u TARGET_USER bash -c 'bash /usr/local/hadoop/sbin/start-dfs.sh' 


or if you want pass with password.



echo TARGET_USER_PASS | sudo -S -H -u TARGET_USER bash -c 'bash /usr/local/hadoop/sbin/start-dfs.sh'


see man sudo:




-H



The -H (HOME) option requests that the security policy set the HOME
environment variable to the home directory of the target user (root by
default) as specified by the password database. Depending on the
policy, this may be the default behavior.



-u user



The -u (user) option causes sudo to run the specified command as a
user other than root. To specify a uid instead of a user name, use #uid.
When running commands as a uid, many shells require that the '#' be
escaped with a backslash (''). Security policies may restrict uids to
those listed in the password database. The sudoers policy allows uids
that are not in the password database as long as the targetpw option is
not set. Other security policies may not support this.








share|improve this answer














share|improve this answer



share|improve this answer








edited Sep 26 '17 at 10:34









terdon♦

123k28232404




123k28232404










answered Sep 26 '17 at 6:38









αғsнιη

15.7k92563




15.7k92563







  • 3




    Why ... bash -c 'bash file.sh'? Couldn't you write it as ... bash file.sh?
    – user000001
    Sep 26 '17 at 10:53













  • 3




    Why ... bash -c 'bash file.sh'? Couldn't you write it as ... bash file.sh?
    – user000001
    Sep 26 '17 at 10:53








3




3




Why ... bash -c 'bash file.sh'? Couldn't you write it as ... bash file.sh?
– user000001
Sep 26 '17 at 10:53





Why ... bash -c 'bash file.sh'? Couldn't you write it as ... bash file.sh?
– user000001
Sep 26 '17 at 10:53













up vote
2
down vote













With su user -c "sh /path/command.sh" you can run a command as user.



I tested with this command:



 echo myPassword | sudo -S su - foobar -c "/usr/bin/watch -n 1 cat /etc/resolv.conf"


After that the watch -n was running as foobar.



So I think your command should work like that:



echo myPassword | sudo -S su - hduser -c "bash /usr/local/hadoop/sbin/start-dfs.sh"





share|improve this answer




















  • Your answer is also correct Thanks
    – Akash Sethi
    Sep 26 '17 at 8:17















up vote
2
down vote













With su user -c "sh /path/command.sh" you can run a command as user.



I tested with this command:



 echo myPassword | sudo -S su - foobar -c "/usr/bin/watch -n 1 cat /etc/resolv.conf"


After that the watch -n was running as foobar.



So I think your command should work like that:



echo myPassword | sudo -S su - hduser -c "bash /usr/local/hadoop/sbin/start-dfs.sh"





share|improve this answer




















  • Your answer is also correct Thanks
    – Akash Sethi
    Sep 26 '17 at 8:17













up vote
2
down vote










up vote
2
down vote









With su user -c "sh /path/command.sh" you can run a command as user.



I tested with this command:



 echo myPassword | sudo -S su - foobar -c "/usr/bin/watch -n 1 cat /etc/resolv.conf"


After that the watch -n was running as foobar.



So I think your command should work like that:



echo myPassword | sudo -S su - hduser -c "bash /usr/local/hadoop/sbin/start-dfs.sh"





share|improve this answer












With su user -c "sh /path/command.sh" you can run a command as user.



I tested with this command:



 echo myPassword | sudo -S su - foobar -c "/usr/bin/watch -n 1 cat /etc/resolv.conf"


After that the watch -n was running as foobar.



So I think your command should work like that:



echo myPassword | sudo -S su - hduser -c "bash /usr/local/hadoop/sbin/start-dfs.sh"






share|improve this answer












share|improve this answer



share|improve this answer










answered Sep 26 '17 at 6:52









chloesoe

1836




1836











  • Your answer is also correct Thanks
    – Akash Sethi
    Sep 26 '17 at 8:17

















  • Your answer is also correct Thanks
    – Akash Sethi
    Sep 26 '17 at 8:17
















Your answer is also correct Thanks
– Akash Sethi
Sep 26 '17 at 8:17





Your answer is also correct Thanks
– Akash Sethi
Sep 26 '17 at 8:17











up vote
1
down vote













You could try this one:




pkexec - Execute a command as another user



pkexec [--user username] PROGRAM [ARGUMENTS...]







share|improve this answer




















  • tested on my site. But if no home dir exists, then there is an error Error changing to home directory /home/foobar: No such file or directory. I created it, but perhaps there is a better solution without home folder
    – chloesoe
    Sep 26 '17 at 10:11














up vote
1
down vote













You could try this one:




pkexec - Execute a command as another user



pkexec [--user username] PROGRAM [ARGUMENTS...]







share|improve this answer




















  • tested on my site. But if no home dir exists, then there is an error Error changing to home directory /home/foobar: No such file or directory. I created it, but perhaps there is a better solution without home folder
    – chloesoe
    Sep 26 '17 at 10:11












up vote
1
down vote










up vote
1
down vote









You could try this one:




pkexec - Execute a command as another user



pkexec [--user username] PROGRAM [ARGUMENTS...]







share|improve this answer












You could try this one:




pkexec - Execute a command as another user



pkexec [--user username] PROGRAM [ARGUMENTS...]








share|improve this answer












share|improve this answer



share|improve this answer










answered Sep 26 '17 at 8:26









Buyduck

111




111











  • tested on my site. But if no home dir exists, then there is an error Error changing to home directory /home/foobar: No such file or directory. I created it, but perhaps there is a better solution without home folder
    – chloesoe
    Sep 26 '17 at 10:11
















  • tested on my site. But if no home dir exists, then there is an error Error changing to home directory /home/foobar: No such file or directory. I created it, but perhaps there is a better solution without home folder
    – chloesoe
    Sep 26 '17 at 10:11















tested on my site. But if no home dir exists, then there is an error Error changing to home directory /home/foobar: No such file or directory. I created it, but perhaps there is a better solution without home folder
– chloesoe
Sep 26 '17 at 10:11




tested on my site. But if no home dir exists, then there is an error Error changing to home directory /home/foobar: No such file or directory. I created it, but perhaps there is a better solution without home folder
– chloesoe
Sep 26 '17 at 10:11

















 

draft saved


draft discarded















































 


draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f394461%2flinux-switch-user-and-execute-command-immediately%23new-answer', 'question_page');

);

Post as a guest













































































Popular posts from this blog

How to check contact read email or not when send email to Individual?

Displaying single band from multi-band raster using QGIS

How many registers does an x86_64 CPU actually have?