重複の可能性:
Linuxシェルに入力されたコマンドを隠す方法は?
画面に表示せずにBashスクリプトからパスワードを読む
パスワードを入力したいのですが、他のユーティリティで処理しているように、ユーザーがパスワードを入力できることを願っています。つまり、文字は画面に表示されません。私はこれを検索してみましたが、明確な答えが見つかりませんでした。
変数を受け入れてから、スクリプトの先頭にある構成ファイルの1つにある事前定義されたスタンドアロンパスワードハードコードされた変数に入力を一致させる必要があります。
予想される動作
$./startScript
username: mtk
password: ********
*
プレースホルダとして表示されます。この部分が見えないようにする必要があります。現在、ユーザーが入力するとパスワードが表示されます。
どうすればいいですか?
答え1
(or)を使用している場合は、sh
(secure)オプションと一緒に使用してくださいbash
。read
-s
read -s pass
パスワードは出力に表示されたり変数に保存されたりせずにユーザーから読み取られますpass
。
答え2
UNIXには、プロンプトを表示し、エコーが無効になっている間にパスワードを読み取る「getpass」C関数があります。
この関数はプロンプト文字列を使用し、パスワードを含むNULLで終わる文字列へのポインタを返します。最大パスワード長を忘れないでください(システムのlimit.hでPASS_MAXを見てください)。
また、「getpass」は、呼び出されるたびに削除される内部静的バッファにパスワードを入れます。したがって、正しい手順を実行するには、できるだけ早くバッファをゼロに設定する必要があります。
以下は、動作を示す小さなプログラムです。
#include <stdio.h>
#include <unistd.h>
int
main( int argc, char** argv ) {
char* password = getpass( "Password: " );
printf( "Your password is: '%s'\n", password );
return 0;
}
答え3
私の考えでは、このコードが好きなように機能しなければならないと思います。
#!/bin/bash
unset username
unset password
echo -n "username:"
read username
prompt="password:"
while IFS= read -p "$prompt" -r -s -n 1 char
do
if [[ $char == $'\0' ]]
then
break
fi
prompt='*'
password+="$char"
done