
特定のユーザーのパスワードを変更するためにさまざまなサーバーに接続しようとしています。
これを行うには、スクリプトを作成する必要があります。問題は、sudoを使用してrootとしてリモートサーバーに接続するためにパスワードを送信する必要があることです。
次のように試していますが、動作しません。
sshpass -p pass ssh user@server << EOF
echo pass | sudo -S -u root "echo 'user2:pass2' | chpasswd"
EOF
私がやろうとしていることをよりよく説明するには、次の手順を実行する必要があります。
- 私のユーザーを使用してサーバーに接続します。
- ルートとして接続するには、「sudo」を使用してください。
- user2のパスワードを変更するには、「echo 'user2:pass2' | chpasswd」を実行してください。
エラーは次のとおりです。
stdin が端末ではないため、疑似端末は割り当てられません。 stat: `pipe:[2670580091]' を stat できません。そのファイルやディレクトリはありません。 [sudo] user1のパスワード:sudo:echo 'user2:XXXXXXX' | chpasswd:コマンドが見つかりません。
答え1
ansible モジュール "user" が問題を解決する必要があります。ただし、暗号化されたパスワードハッシュを提供する必要があります。ハッシュするには、次のコマンドを使用します。
mkpasswd --method=sha-512
生成されたハッシュ文字列を引用符で囲み、次の一時コマンドを実行します。
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