我正在尝试连接到各种服务器以更改特定用户的密码。
我需要构建一个脚本来完成这项工作,复杂的是我必须使用 sudo 并发送密码才能以 root 身份连接到远程服务器。
我正在尝试这样的事情但不起作用:
sshpass -p pass ssh user@server << EOF
echo pass | sudo -S -u root "echo 'user2:pass2' | chpasswd"
EOF
为了更好地解释我想要做什么,我需要执行以下步骤:
- 使用我的用户连接到服务器。
- 使用“sudo”作为 root 进行连接。
- 执行“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