SSH + 使用 root 更改密码

SSH + 使用 root 更改密码

我正在尝试连接到各种服务器以更改特定用户的密码。

我需要构建一个脚本来完成这项工作,复杂的是我必须使用 sudo 并发送密码才能以 root 身份连接到远程服务器。

我正在尝试这样的事情但不起作用:

sshpass -p pass ssh user@server << EOF
  echo pass | sudo -S -u root "echo 'user2:pass2' | chpasswd"
EOF

为了更好地解释我想要做什么,我需要执行以下步骤:

  1. 使用我的用户连接到服务器。
  2. 使用“sudo”作为 root 进行连接。
  3. 执行“echo 'user2:pass2' | chpasswd”以更改user2的密码。

这是错误:

伪终端不会被分配,因为 stdin 不是终端。 stat: 无法 stat `pipe:[2670580091]': 没有这样的文件或目录 [sudo] user1 的密码: sudo: echo 'user2:XXXXXXX' | chpasswd:未找到命令

答案1

ansible 模块“user”应该可以解决您的问题。但您必须提供已经加密的密码哈希。使用以下命令进行哈希:

mkpasswd --method=sha-512

使用带引号的生成的哈希字符串执行像这样的 ansible adhoc 命令:

ansible -v all -i <hostname>, --become --extra-vars 'ansible_become_pass=<sudo password> ansible_password=<sudo password>' --user=<ssh user> -k -m user --args='name=root update_password=always password="$6$IZjuXoio1$zHpQQDZGDPwG8mr2R6Mrt1C8Nqstui75enT/o0oSVJ3M6rqff8993kmAaTgbc9q9HTgPD2jtZukEqgeIGKfUN0"'

先决条件:客户端计算机上有 ansible 和 sshpass。

答案2

我已经通过 ssh 以 root 身份执行了以下操作:

ssh -t  you@server <<EOF 
  echo pass_for_you | sudo -S bash -c "commands to do as root";   
EOF 

答案3

这有帮助吗?或者类似的东西?假设我明白你想做什么?

for i in server{1,2,3}; do
   ssh -t user@$i 'sudo passwd user2'
done

相关内容