プログラムでパスワードを変更する


11

現在のバージョンのRaspianでは、現在ログインしているユーザーのパスワードをコマンドラインから次のように変更できることを知っています。

sudo passwd

次に、ユーザーに新しいパスワードを2回入力するように求めます。これにより、次のような出力が生成されます。

Changing password for pi.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

シェルスクリプトからのように、プログラムでパスワードを変更する方法があるかどうか疑問に思っていました。

Raspberry Piに展開する構成スクリプトを作成しようとしています。手動で新しいパスワードを入力する必要はありません。


1
現在のユーザーのパスワードを変更するために、プレフィックスを付ける必要はありませんsudo。使用する場合はsudo、そのユーザーの現在のパスワードを知らなくても、どのユーザーにも新しいパスワードを強制できます。
roaima 2015

expect(1)同様に助けることができます。
SailorCire、2015

プログラムでパスワードを変更するときは、セキュリティへの影響を考慮してください。
Josh Habdas

回答:


18

chpasswdコマンドを探しています。あなたはこのようなことをするでしょう:

echo 'pi:newpassword' | chpasswd # change user pi password to newpassword

少なくともデフォルトのPAM構成では、ルートとして実行する必要があることに注意してください。しかし、おそらくrootとして実行することは、システム展開スクリプトの問題ではありません。

また、複数行の入力を与えることにより、一度に複数のユーザーを実行できます。


9

別の方法はyes、スクリプトでコマンドを使用することです。

yes newpassword | passwd youruser

これはnewpasswordpasswdコマンドに送信されyouruserます。

スクリプトを使用してユーザーパスワードを設定/変更すると、セキュリティリスクが生じる可能性があるため、可能な限り回避する必要があることに注意してください。

編集:

この回答にはrootアクセスが必要です。これについて以前言及しなかったことをお詫びします。これは、ルートアクセスを必要とする管理タスクを実行するときに使用する方法です。


これを試しましたか?
roaima

はい。私はこの方法を何年も使用しています。私は私の答えを投稿する前に、そして今ちょうどそれをテストしました。
ティモシーマーティン

端末(キーボード)ではなくpasswd読み取ると仮定してstdinも、passwd最初にユーザーの古いパスワードの入力を求められ、次に新しいパスワードの入力を求められると、これはどのように機能しますか?
roaima

@roaimaは恐らくティモシーをrootとして実行します(これにより、彼がyouruser最後に必要な理由が説明されます)。それはどこかで動作するかもしれません...
derobert '20

1
@roaima passwdLinuxのシャドウユーティリティからのコマンドは、リダイレクトされた入力を受け入れます(OpenSSHなどとは異なりますssh)。yesただし、使用することはお勧めできません。間違ったときにプロセスリストを見るスヌーパーにパスワードを公開します。echoシェル組み込みなので、使用してもこの欠陥はありません。
Gilles「SO-邪悪なことをやめよ」
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.