スクリプトSSHサーバーにsudoコマンドを使用する

スクリプトSSHサーバーにsudoコマンドを使用する

複数のサーバーで次の手順を実行する必要があります。

  1. ユーザー名でログイン
  2. 入力sudo su -
  3. 入力amCLI -l 32/1 | grep Firmware

そこで、これをすべて 1 つのスクリプトに記述したいと考えました。私のアイデアは次のとおりです。

#!bin/bash
for hostname in DPM-BZ0201 DPM-BZ0202
do
ssh -n vneudeck@$hostname "sudo su-; amCLI -l 32/1 | grep Firmware"
done

または

#!bin/bash
for hostname in DPM-BZ0201 DPM-BZ0202
do
ssh -n vneudeck@$hostname "sudo amCLI -l 32/1 | grep Firmware"
done

ただし、どちらも機能しません。

答え1

より良い解決策は、ユーザーが/full/path/to/amCLIパスワードを入力せずに実行できるように sudo を設定することです。

そうすると、

#!bin/bash
for hostname in DPM-BZ0201 DPM-BZ0202
do
    ssh -n vneudeck@$hostname sudo /full/path/to/amCLI -l 32/1 | grep Firmware
done

答え2

vneudeck@$hostname を二重引用符で囲むと役立つかもしれません。su と - の間にはスペースを入れないでください。役立つことを願っています。

答え3

最初のものは機能しません:

sudo su -; amCLI -l 32/1 | grep Firmware

これは を実行しsudo su -、これが返されたとき (つまり、root としてコマンドの処理が完了して終了したとき) に amCLI を実行します。( の代替として も使用できますが、より多くの機能がsudo suあると思います。)sudo -ssudo su -

2 番目のバージョンは、いくつかの条件を満たせば機能する可能性があります。sudoパスワードを尋ねてはならず、amCLIPATH 内にある必要があります ( と入力すると設定される可能性のある root のパスではなく、sudo がユーザーのパスを使用するため、ユーザーのパス)。 などのsudo su -へのフルパスを指定してみてください。amCLI/usr/local/sbin/amCLI

関連情報