パラレルSSHを使用してsudoを実行する方法

パラレルSSHを使用してsudoを実行する方法

Linux:Ubuntu 14.04.3 LTS

cat /tmp/passfile
ABCxyz123

sshpass -f /tmp/passfile parallel-ssh -I -A -h hostlist.txt "sudo -S ls -l /root" < /tmp/passfile

Googleディスカッションで説明されている方法Googleグループ 出力エラーは次のとおりです。

[1] 01:07:25 [FAILURE] 10.0.4.194 Exited with error code 255
[2] 01:07:25 [FAILURE] 10.0.4.205 Exited with error code 255

リモートサーバーから/var/log/auth.logに接続しようとすると、次のメッセージが表示されます。

Sep 24 19:20:52 ubu1401 sshd[5765]: Accepted password for ubuntu from 10.0.4.1 port 55019 ssh2
Sep 24 19:20:52 ubu1401 sshd[5765]: pam_unix(sshd:session): session opened for user ubuntu by (uid=0)
Sep 24 19:21:26 ubu1401 sshd[5765]: pam_unix(sshd:session): session closed for user ubuntu
Sep 24 19:21:26 ubu1401 sudo: pam_unix(sudo:auth): conversation failed
Sep 24 19:21:26 ubu1401 sudo: pam_unix(sudo:auth): auth could not identify password for [ubuntu]
Sep 24 19:22:25 ubu1401 sshd[5791]: Connection closed by 10.0.4.1 [preauth]

答え1

できるだけ安全なパスワードを提供するには、このバージョンを試してください(psshCentOS、Fedora、parallel-sshUbuntu、Debian):

stty -echo; printf "Password: "; read PASS; stty echo; echo "${PASS}" | \ ssh <USER>@localhost "sudo -S dmesg"

アップデート(@chutzのおかげで):

read -s -p "Password: "; echo "${REPLY}" | \ ssh <USER>@localhost "sudo -S dmesg"

次に、次のようにpsshに適用します(それに応じて更新):

read -s -p "Password: "; echo "${REPLY}" | \ pssh -H <USER>@localhost -o /tmp/output -I "sudo -S dmesg"

同じ方法を使用して、複数のサーバーから一時的にダンプを収集します。Ctrlこれを停止するには、通常どおり+を使用してくださいC。これは表示されますが、[FAILURE] <HOST> Interruptedこれはtcpdumpが無限に実行されるためです。出力は依然として一般的な位置にあります。この-t 0オプションは、接続がタイムアウトしないようにするためのものです。 tmuxまたはscreenを使用して後でダンプを収集することもできます。

read -s -p "Password: "; echo "${REPLY}" | \ pssh -h <HOSTFILE> -o /tmp/output -t 0 -I "sudo -S tcpdump -l -nn -vv -i any not port 22"

正しいSSHユーザーが含まれていること、および以前にこれらのサーバーに接続したことがないことを確認してください。ローカルテストによってサーバーファーム全体がシャットダウンしないことがよくあります。複数のホストを近似するには、localhostの代わりに127.0.0.Xアドレスを使用できます。

答え2

シェルにパスワードをエコーし​​て実行してみましたか?

echo "echo 'yourpassword'; sudo -S -c 'ls -l /root'"|pssh -I -H hostlist.txt

答え3

私は私の簡単なツール「spssh.sh」をお勧めしたいと思います(https://github.com/tangruize/spssh)シンプルですが(たった36個のsloc)十分に便利です。並列SSHとは異なり、spssh.shは対話型であり、並列/別々のcmd実行をサポートします。役に立ったことを願っています!

答え4

同意する @satch_boogieコメント上記の方法(ansible必要に応じて使用、SUDO必要でない場合に使用)は、初期設定がより複雑になりますが、よりきれいなIMOです。psshSUDOansible

短い答え:アップデートおよびアップグレードパッケージの例apt:

ansible myservers -a "sudo apt -y update" --become -K

ansible myservers -a "sudo apt -y upgrade" --become -K

長い答えと設定: 私の場合は、MacOSをローカルで使用してリモートLinuxシステムを管理しています。私は次のことをしました。 Linuxを使用している場合は少し異なる場合があります。

  1. ローカルコンピュータとすべてのターゲットコンピュータで同じユーザーを作成する必要があります。sudo adduser username
  2. 各ターゲットコンピュータのSUDOグループにユーザーを追加します。usermod -aG sudo username
  3. (おそらくオプション)設定パスワードのないSSHあえてこれを行うべきかどうかはわかりませんが、環境はすでに設定されています。パスワードのないSSHが必要ない場合があるので、まず次の手順を試してください。
  4. ローカルマシンにansibleをインストールしてください:(brew install ansibleまたはlinux sudo apt install ansible
  5. ローカルコンピュータでansibleのデフォルトホストファイルを作成します。sudo mkdir /etc/ansible && sudo touch /etc/ansible/hosts
  6. ファイルの編集sudo nano /etc/ansible/hosts
  7. グループ(IPまたはコンピュータ名)にターゲットコンピュータを追加します。
[myservers]
blah1.local
blah2.local
blah3.local
  1. (オプション)すべてのターゲットコンピュータのSUDOグループに2番目のユーザーがいるため、プロンプトを避けるためにSUDOグループからそのユーザーを一時的に削除する必要があります(たとえば、sudo systemctlSUDOユーザーを選択するように求めるメッセージを使用する場合)。ansible myservers -a "sudo deluser otheruser sudo" --become -K
  2. 次に、目的の実際のSUDOコマンドを実行します。例:ansible myservers -a "sudo apt -y update" --become -K
  3. (オプション) SUDO グループに別のユーザーを再度追加します。ansible myservers -a "sudo adduser otheruser sudo" --become -K

これで、複数のマシンでSUDOコマンドを実行する必要があるたびに、手順8〜10を繰り返します。

関連情報