それぞれに同じユーザーセットを持つ2台のマシンがあります。 1台のマシンにスクリプトがあり、両方のマシンのパスワードを変更したい。
そこで、ランダムなパスワードを生成してからハッシュし、次のようにusermodコマンドに渡します。
usermod -p PASSWORD_HASH USER
ssh REMOTE_USER@REMOTE_Host Sudo usermod -p PASSWORD_HASH USER
REMOTE_USERには、パスワードを要求せずにSudoを使用してそのコマンドを実行する特権があります。
この結果、ローカルマシンでパスワードが正常に変更されます。次のことを試してすぐに確認できます。
su USER
/ etc/shadowファイルもチェックしましたが、ハッシュが実際に正しく保存されているようです。
ただし、他のマシンにジャンプしてそこにUSERとしてログインしようとすると、アクセスできません。認証エラーが発生します。スーパーユーザー特権でリモートマシンにログインし、/ etc/shadowファイルをチェックすると、パスワードハッシュが完全に文字化けし、意味がありません。
ただし、そのリモートマシン上で、sshを使用せずにまったく同じコマンドを実行すると、
Sudo usermod -p PASSWORD_HASH USER
その後、すべてが正常に動作します。
私の質問:
ここにいくつかの詳細がありますが、それはusermodコマンドが何らかの理由でsshで動作しない原因です?
この関連する回答 を参照してください。要するに、SSHは引数のリストとしてではなく、文字列として後続のものを渡すため、引用符で囲みます。また、最後のSudoの前に&&
を挿入することもできます。