Switching multiple user at once





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}







1















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









share|improve this question































    1















    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









    share|improve this question



























      1












      1








      1








      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









      share|improve this question
















      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






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Apr 4 at 8:41









      dessert

      25.7k674108




      25.7k674108










      asked Apr 4 at 8:26









      Jack15Jack15

      62




      62






















          1 Answer
          1






          active

          oldest

          votes


















          1














          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
          ----------------





          share|improve this answer





















          • 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











          • 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 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












          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
          });


          }
          });














          draft saved

          draft discarded


















          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









          1














          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
          ----------------





          share|improve this answer





















          • 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











          • 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 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
















          1














          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
          ----------------





          share|improve this answer





















          • 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











          • 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 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














          1












          1








          1







          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
          ----------------





          share|improve this answer















          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
          ----------------






          share|improve this answer














          share|improve this answer



          share|improve this answer








          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 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













          • 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 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














          • 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











          • 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 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








          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


















          draft saved

          draft discarded




















































          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.




          draft saved


          draft discarded














          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





















































          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







          Popular posts from this blog

          數位音樂下載

          格利澤436b

          When can things happen in Etherscan, such as the picture below?