Switching multiple user at once
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}
I have a need in my bash script where user have to execute one script on multiple hosts.
Lets say user1 , user2, & user3
.
User1 have an access to switch to user2 but not user3 and the script has to be execute via user3.
To execute in one host - its possible as below- lets I am user1 and will execute below commands.
sudo -i -u user2
sudo -u user3 script <hostname>
But unable to execute on multiple hosts via for loop as below
#!/bin/bash
sudo -i -u user2;
for i in `cat /tmp/hostlist`;do
echo $i
sudo -u user3 script.sh $i
echo "----------------"
done
bash
add a comment |
I have a need in my bash script where user have to execute one script on multiple hosts.
Lets say user1 , user2, & user3
.
User1 have an access to switch to user2 but not user3 and the script has to be execute via user3.
To execute in one host - its possible as below- lets I am user1 and will execute below commands.
sudo -i -u user2
sudo -u user3 script <hostname>
But unable to execute on multiple hosts via for loop as below
#!/bin/bash
sudo -i -u user2;
for i in `cat /tmp/hostlist`;do
echo $i
sudo -u user3 script.sh $i
echo "----------------"
done
bash
add a comment |
I have a need in my bash script where user have to execute one script on multiple hosts.
Lets say user1 , user2, & user3
.
User1 have an access to switch to user2 but not user3 and the script has to be execute via user3.
To execute in one host - its possible as below- lets I am user1 and will execute below commands.
sudo -i -u user2
sudo -u user3 script <hostname>
But unable to execute on multiple hosts via for loop as below
#!/bin/bash
sudo -i -u user2;
for i in `cat /tmp/hostlist`;do
echo $i
sudo -u user3 script.sh $i
echo "----------------"
done
bash
I have a need in my bash script where user have to execute one script on multiple hosts.
Lets say user1 , user2, & user3
.
User1 have an access to switch to user2 but not user3 and the script has to be execute via user3.
To execute in one host - its possible as below- lets I am user1 and will execute below commands.
sudo -i -u user2
sudo -u user3 script <hostname>
But unable to execute on multiple hosts via for loop as below
#!/bin/bash
sudo -i -u user2;
for i in `cat /tmp/hostlist`;do
echo $i
sudo -u user3 script.sh $i
echo "----------------"
done
bash
bash
edited Apr 4 at 8:41
dessert
25.7k674108
25.7k674108
asked Apr 4 at 8:26
Jack15Jack15
62
62
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
You need to execute second sudo as a argument to first sudo. It will looks like this:
#!/usr/bin/env bash
sudo -i -u user2 /bin/bash <<EOF
#commands here will be executed as user=user2
while IFS='' read -r i || [[ -n "$i" ]]; do
echo "$i"
sudo -u user3 script.sh "$i"
echo "----------------"
done </tmp/hostlist
EOF
Testing:
$ echo 111 >/tmp/hostlist
$ echo 222 >>/tmp/hostlist
$ echo 333 >>/tmp/hostlist
$ ./loophosts
111
----------------
222
----------------
333
----------------
1
for i in $(cat /tmp/hostlist)
will fail if there are lines with IFS characters in the file, to loop over a file line by line one should rather usewhile IFS='' read -r l || [[ -n "$l" ]]; do (something with $l); done </tmp/hostlist
, see stackoverflow.com/q/10929453/6164712.
– dessert
Apr 4 at 8:38
The error about you don't have EOF, put it in place and error will gone
– LeonidMew
Apr 4 at 9:00
Same error? Do you have "EOL" at end of heredoc?
– LeonidMew
Apr 4 at 9:12
Yes I placed at end EOF. The error gone. But gives the single line as output ----------------
– Jack15
Apr 4 at 9:14
You can debug bash script if putset -x
as second line of script, then it will show every command it run. I guess something wrong with /tmp/hostlist
– LeonidMew
Apr 4 at 9:17
|
show 5 more comments
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "89"
};
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',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1131115%2fswitching-multiple-user-at-once%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You need to execute second sudo as a argument to first sudo. It will looks like this:
#!/usr/bin/env bash
sudo -i -u user2 /bin/bash <<EOF
#commands here will be executed as user=user2
while IFS='' read -r i || [[ -n "$i" ]]; do
echo "$i"
sudo -u user3 script.sh "$i"
echo "----------------"
done </tmp/hostlist
EOF
Testing:
$ echo 111 >/tmp/hostlist
$ echo 222 >>/tmp/hostlist
$ echo 333 >>/tmp/hostlist
$ ./loophosts
111
----------------
222
----------------
333
----------------
1
for i in $(cat /tmp/hostlist)
will fail if there are lines with IFS characters in the file, to loop over a file line by line one should rather usewhile IFS='' read -r l || [[ -n "$l" ]]; do (something with $l); done </tmp/hostlist
, see stackoverflow.com/q/10929453/6164712.
– dessert
Apr 4 at 8:38
The error about you don't have EOF, put it in place and error will gone
– LeonidMew
Apr 4 at 9:00
Same error? Do you have "EOL" at end of heredoc?
– LeonidMew
Apr 4 at 9:12
Yes I placed at end EOF. The error gone. But gives the single line as output ----------------
– Jack15
Apr 4 at 9:14
You can debug bash script if putset -x
as second line of script, then it will show every command it run. I guess something wrong with /tmp/hostlist
– LeonidMew
Apr 4 at 9:17
|
show 5 more comments
You need to execute second sudo as a argument to first sudo. It will looks like this:
#!/usr/bin/env bash
sudo -i -u user2 /bin/bash <<EOF
#commands here will be executed as user=user2
while IFS='' read -r i || [[ -n "$i" ]]; do
echo "$i"
sudo -u user3 script.sh "$i"
echo "----------------"
done </tmp/hostlist
EOF
Testing:
$ echo 111 >/tmp/hostlist
$ echo 222 >>/tmp/hostlist
$ echo 333 >>/tmp/hostlist
$ ./loophosts
111
----------------
222
----------------
333
----------------
1
for i in $(cat /tmp/hostlist)
will fail if there are lines with IFS characters in the file, to loop over a file line by line one should rather usewhile IFS='' read -r l || [[ -n "$l" ]]; do (something with $l); done </tmp/hostlist
, see stackoverflow.com/q/10929453/6164712.
– dessert
Apr 4 at 8:38
The error about you don't have EOF, put it in place and error will gone
– LeonidMew
Apr 4 at 9:00
Same error? Do you have "EOL" at end of heredoc?
– LeonidMew
Apr 4 at 9:12
Yes I placed at end EOF. The error gone. But gives the single line as output ----------------
– Jack15
Apr 4 at 9:14
You can debug bash script if putset -x
as second line of script, then it will show every command it run. I guess something wrong with /tmp/hostlist
– LeonidMew
Apr 4 at 9:17
|
show 5 more comments
You need to execute second sudo as a argument to first sudo. It will looks like this:
#!/usr/bin/env bash
sudo -i -u user2 /bin/bash <<EOF
#commands here will be executed as user=user2
while IFS='' read -r i || [[ -n "$i" ]]; do
echo "$i"
sudo -u user3 script.sh "$i"
echo "----------------"
done </tmp/hostlist
EOF
Testing:
$ echo 111 >/tmp/hostlist
$ echo 222 >>/tmp/hostlist
$ echo 333 >>/tmp/hostlist
$ ./loophosts
111
----------------
222
----------------
333
----------------
You need to execute second sudo as a argument to first sudo. It will looks like this:
#!/usr/bin/env bash
sudo -i -u user2 /bin/bash <<EOF
#commands here will be executed as user=user2
while IFS='' read -r i || [[ -n "$i" ]]; do
echo "$i"
sudo -u user3 script.sh "$i"
echo "----------------"
done </tmp/hostlist
EOF
Testing:
$ echo 111 >/tmp/hostlist
$ echo 222 >>/tmp/hostlist
$ echo 333 >>/tmp/hostlist
$ ./loophosts
111
----------------
222
----------------
333
----------------
edited Apr 4 at 9:57
answered Apr 4 at 8:34
LeonidMewLeonidMew
1,235624
1,235624
1
for i in $(cat /tmp/hostlist)
will fail if there are lines with IFS characters in the file, to loop over a file line by line one should rather usewhile IFS='' read -r l || [[ -n "$l" ]]; do (something with $l); done </tmp/hostlist
, see stackoverflow.com/q/10929453/6164712.
– dessert
Apr 4 at 8:38
The error about you don't have EOF, put it in place and error will gone
– LeonidMew
Apr 4 at 9:00
Same error? Do you have "EOL" at end of heredoc?
– LeonidMew
Apr 4 at 9:12
Yes I placed at end EOF. The error gone. But gives the single line as output ----------------
– Jack15
Apr 4 at 9:14
You can debug bash script if putset -x
as second line of script, then it will show every command it run. I guess something wrong with /tmp/hostlist
– LeonidMew
Apr 4 at 9:17
|
show 5 more comments
1
for i in $(cat /tmp/hostlist)
will fail if there are lines with IFS characters in the file, to loop over a file line by line one should rather usewhile IFS='' read -r l || [[ -n "$l" ]]; do (something with $l); done </tmp/hostlist
, see stackoverflow.com/q/10929453/6164712.
– dessert
Apr 4 at 8:38
The error about you don't have EOF, put it in place and error will gone
– LeonidMew
Apr 4 at 9:00
Same error? Do you have "EOL" at end of heredoc?
– LeonidMew
Apr 4 at 9:12
Yes I placed at end EOF. The error gone. But gives the single line as output ----------------
– Jack15
Apr 4 at 9:14
You can debug bash script if putset -x
as second line of script, then it will show every command it run. I guess something wrong with /tmp/hostlist
– LeonidMew
Apr 4 at 9:17
1
1
for i in $(cat /tmp/hostlist)
will fail if there are lines with IFS characters in the file, to loop over a file line by line one should rather use while IFS='' read -r l || [[ -n "$l" ]]; do (something with $l); done </tmp/hostlist
, see stackoverflow.com/q/10929453/6164712.– dessert
Apr 4 at 8:38
for i in $(cat /tmp/hostlist)
will fail if there are lines with IFS characters in the file, to loop over a file line by line one should rather use while IFS='' read -r l || [[ -n "$l" ]]; do (something with $l); done </tmp/hostlist
, see stackoverflow.com/q/10929453/6164712.– dessert
Apr 4 at 8:38
The error about you don't have EOF, put it in place and error will gone
– LeonidMew
Apr 4 at 9:00
The error about you don't have EOF, put it in place and error will gone
– LeonidMew
Apr 4 at 9:00
Same error? Do you have "EOL" at end of heredoc?
– LeonidMew
Apr 4 at 9:12
Same error? Do you have "EOL" at end of heredoc?
– LeonidMew
Apr 4 at 9:12
Yes I placed at end EOF. The error gone. But gives the single line as output ----------------
– Jack15
Apr 4 at 9:14
Yes I placed at end EOF. The error gone. But gives the single line as output ----------------
– Jack15
Apr 4 at 9:14
You can debug bash script if put
set -x
as second line of script, then it will show every command it run. I guess something wrong with /tmp/hostlist– LeonidMew
Apr 4 at 9:17
You can debug bash script if put
set -x
as second line of script, then it will show every command it run. I guess something wrong with /tmp/hostlist– LeonidMew
Apr 4 at 9:17
|
show 5 more comments
Thanks for contributing an answer to Ask Ubuntu!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1131115%2fswitching-multiple-user-at-once%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown