如何使用并行 ssh 运行 sudo

sat*_*gie 7 linux ssh ubuntu parallel-ssh

Linux:ubuntu 14.04.3 LTS

cat /tmp/passfile
ABCxyz123
Run Code Online (Sandbox Code Playgroud)

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

并且该方法在谷歌讨论此处描述groups.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
Run Code Online (Sandbox Code Playgroud)

在远程服务器中,我试图连接它的 /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]
Run Code Online (Sandbox Code Playgroud)

Ada*_*isz 5

要尽可能安全地提供密码,请尝试使用此版本(pssh在 CentOS、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 用户并且您之前连接到这些服务器。在本地测试事物通常可以防止关闭整个服务器群。您可以使用 127.0.0.X 地址而不是 localhost 来近似多个主机。

  • 对于我们的 Ubuntu 18.04 网络,我必须添加 -x '-tt'; 否则这是完美的。 (3认同)
  • -x '-tt' 指示 pssh 将 -tt 参数发送到 ssh,在那里它强制进行伪终端分配。这是让 ssh 接收密码所必需的。 (2认同)

Ale*_* Oh 0

您是否尝试过通过在 shell 中回显密码来运行它?

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

  • 我使用 ansible 而不是并行 ssh (我想检查磁盘使用情况、可用内存等) (3认同)