結論
結論から言うと、
expectパッケージを導入して、mkpasswd-expectコマンドを使え
って話です。
経緯
長いことmkpasswdコマンドを使用してきて、このコマンドを利用した大量パスワード生成シェルだとか、自分用のパスワード生成シェルとか作って再利用してきました。
さて、パスワードを作ろうか、と思ったら、んんん?????
何だ、と思ったらmkpasswdコマンドがインストールされてない。
あぁ、初回はいつものことか、と思いながらインストールを進める。
# mkpasswd
bash: mkpasswd: command not found...
Install package 'mkpasswd' to provide command 'mkpasswd'? [N/y] y
* Waiting in queue...
* Loading list of packages....
The following packages have to be installed:
mkpasswd-5.5.9-4.el9.x86_64 Encrypt a password with crypt(3) function using a salt
whois-nls-5.5.9-4.el9.noarch Gettext catalogs for whois tools
Proceed with changes? [N/y]
ここで違和感。
あれ?こんなパッケージ名だっけ?依存関係で他のパッケージを要求されたことはないぞ。パッケージ変わった?
ということで、インストールしてみる。
Proceed with changes? [N/y] y
* Waiting in queue...
* Waiting for authentication...
* Waiting in queue...
* Downloading packages...
* Requesting data...
* Testing changes...
* Installing packages...
パスワード:
パスワード????
もうハテナがいっぱいです。
rootで実行しているし、sudoでもsuでもない。
とりあえずEnterしてみる。
パスワード:
$y$j9T$QvEdz5Gr4uzXBJ5AWtCJE0$JZf4TLXnFbOKgj25AlV883EDG7mayieMPcjr.JHNJQ0
#
これは、shadowパスワードじゃないですか!
man pageやドキュメントを確認してみると、思った通り。
余計なことをしちゃったので削除です。
# dnf remove mkpasswd whois-nls
サブスクリプション管理リポジトリーを更新しています。
依存関係が解決しました。
================================================================================
パッケージ Arch バージョン リポジトリー サイズ
================================================================================
削除中:
mkpasswd x86_64 5.5.9-4.el9 @rhel-9-for-x86_64-appstream-rpms 48 k
whois-nls noarch 5.5.9-4.el9 @rhel-9-for-x86_64-appstream-rpms 111 k
トランザクションの概要
================================================================================
削除 2 パッケージ
解放された容量: 158 k
これでよろしいですか? [y/N]: y
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
準備 : 1/1
削除 : mkpasswd-5.5.9-4.el9.x86_64 1/2
削除 : whois-nls-5.5.9-4.el9.noarch 2/2
scriptletの実行中: whois-nls-5.5.9-4.el9.noarch 2/2
検証 : mkpasswd-5.5.9-4.el9.x86_64 1/2
検証 : whois-nls-5.5.9-4.el9.noarch 2/2
インストール済みの製品が更新されています。
削除しました:
mkpasswd-5.5.9-4.el9.x86_64 whois-nls-5.5.9-4.el9.noarch
完了しました!
#
pwmakeは使い辛い
mkpasswdは無くなっちゃったのかぁ、他のコマンド探さないと、と見つけたのがpwmakeコマンド。
:
:
いやー、使い辛いです、このコマンド。
コマンドオプションで自由に大文字小文字特殊文字等の指定が出来ず、システムのパスワード要件いじらないといけない。
自分の中で却下でした。
見つけました
RHEL9のリリースノートにmkpasswdに関する変更の記載があった記憶も無いし、もしかしてどこか別のパスにインストールされる?と思い、検索。
# dnf whatprovides */mkpasswd*
サブスクリプション管理リポジトリーを更新しています。
メタデータの期限切れの最終確認: 0:02:51 前の 2023年05月20日 19時02分54秒 に実施しました。
expect-5.45.4-15.el9.x86_64 : A program-script interaction and testing utility
Repo : rhel-9-for-x86_64-appstream-rpms
一致:
ファイル名 : /usr/bin/mkpasswd-expect
ファイル名 : /usr/share/man/man1/mkpasswd-expect.1.gz
mkpasswd-5.5.9-4.el9.x86_64 : Encrypt a password with crypt(3) function using a
: salt
Repo : rhel-9-for-x86_64-appstream-rpms
一致:
ファイル名 : /usr/bin/mkpasswd
ファイル名 : /usr/share/doc/mkpasswd/README
ファイル名 : /usr/share/licenses/mkpasswd/COPYING
ファイル名 : /usr/share/licenses/mkpasswd/copyright
ファイル名 : /usr/share/man/man1/mkpasswd.1.gz
ファイル名 : /usr/share/doc/mkpasswd
ファイル名 : /usr/share/licenses/mkpasswd
#
お、そうそう。expectパッケージ!
あー、コマンド名が変わってますね。
mkpasswdパッケージがmkpasswdコマンドを提供するので、expectパッケージ側を変更するしかなかった、って感じでしょうか。
ということでexpectパッケージを導入して完了です。
~/bin/mkpasswdって感じで/usr/bin/mkpasswd-expectへのリンクを作ってもいいかなぁとも思いましたが、そのままにしてます。
シェルは内部変数でコマンド指定するように作ってあるのでそこを直して完了。
シェルの中でRHEL9の場合、とか、mkpasswd-expectが存在する場合、って分岐させてもいいかなぁと思いましたが、そこまでの元気が無いのでまた今度、と思ってます。
//