Linuxのユーザーパスワードを、対話機能なしでコマンドラインから変更できますか?


15

特定のユースケースで、対話性なしで1つのコマンドでユーザーのパスワードを変更できるようにしたい場合があります。これは安全な方法(SSH経由、およびログインできるユーザーが1人だけのシステム)で行われているため、コマンドラインで新しいパスワード(および必要に応じて古いパスワードも)を公開することは問題ありません。FWIW、Ubuntuシステムです。

このシステムにExpectのようなものをこの1つのタスクだけに追加する必要はありません。


3
FreeBSDでこれを行いたい人のために:echo "newpassword" | pw usermod theusername -h 0
Paul Hoffman

回答:



5

オプションusermodとともに使用して-p、パスワードハッシュ(実際のパスワードではありません)を提供できます。mkpasswd -m sha-256またはのようなものを使用してパスワードハッシュを生成できますmkpasswd -m md5


1
...しかし、私のAIXシステムにはありませんusermod: '(-質問のタグを修正します。
voretaq7

3

承知しました。

  1. ローカルシステムでパスワードをハッシュします。
  2. リモートマシンに接続します(パスワードを変更する場所)
  3. 創造的にハッシュされたパスワードとユーザー名をフィードsed(システムのパスワードファイルを更新するスクリプト/etc/shadow/etc/master.passwdあることを起こるものは何でも、)。

1

このpasswdユーティリティには、次の状態を示す--stdinオプションがあります。

このオプションは、passwdが標準入力(パイプなど)から新しいパスワードを読み取る必要があることを示すために使用されます。

構文:

echo "newpass" | passwd --stdin user1

気にしないと言ったとしても、パスワードをテキストファイルに入力してcat pass.txtから、echoコマンドの代わりに実行すると、bash履歴に表示されません。


それだ。 echo VerySecret | passwd --stdin username
MadHatter

5
私のUbuntuシステムには--stdinのオプションがありませんpasswd
ジェフファーランド

あなたは正しい、そうではない。CentOSシステムとMacの両方をチェックしましたが、-stdinオプションがあるため、削除するのはUbuntuのことです。
サファド

1
@RyanM FreeBSD(およびAFAIK NetBSDとOpenBSD、AIX、HP-UX、Solarisは最後にチェックしました)もサポートしていません--stdin-主に大きな巨大なセキュリティホールが発生するのを待っているからです:
voretaq7

1
@quanta:またはecho "newpass" | passwd --stdin user1、スペースで行を開始します。そうすれば、bashの履歴にはまったく行きません。
ジャンヌピッカライネン

1

--stdinオプションが機能しない場合、基本的に2つのオプションを使用できます。

  1. chpaswdスクリプトで呼び出される別のユーティリティを使用します。
  2. または使用 echo "current_password\nnew_password\nnew_password" | passwd user_name
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.