SSH+ルートを使用してパスワードを変更する

SSH+ルートを使用してパスワードを変更する

特定のユーザーのパスワードを変更するためにさまざまなサーバーに接続しようとしています。

これを行うには、スクリプトを作成する必要があります。問題は、sudoを使用してrootとしてリモートサーバーに接続するためにパスワードを送信する必要があることです。

次のように試していますが、動作しません。

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

私がやろうとしていることをよりよく説明するには、次の手順を実行する必要があります。

  1. 私のユーザーを使用してサーバーに接続します。
  2. ルートとして接続するには、「sudo」を使用してください。
  3. 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が必要です。

おすすめ記事