シェルスクリプトに「パスワード」を入力するには? [コピー]

シェルスクリプトに「パスワード」を入力するには? [コピー]

重複の可能性:
Linuxシェルに入力されたコマンドを隠す方法は?
画面に表示せずにBashスクリプトからパスワードを読む

パスワードを入力したいのですが、他のユーティリティで処理しているように、ユーザーがパスワードを入力できることを願っています。つまり、文字は画面に表示されません。私はこれを検索してみましたが、明確な答えが見つかりませんでした。

変数を受け入れてから、スクリプトの先頭にある構成ファイルの1つにある事前定義されたスタンドアロンパスワードハードコードされた変数に入力を一致させる必要があります。

予想される動作

$./startScript
username: mtk
password: ********

*プレースホルダとして表示されます。この部分が見えないようにする必要があります。現在、ユーザーが入力するとパスワードが表示されます。

どうすればいいですか?

答え1

(or)を使用している場合は、sh(secure)オプションと一緒に使用してくださいbashread-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

関連情報