Bash スクリプトで画面に表示せずにパスワードを読み取る

Bash スクリプトで画面に表示せずにパスワードを読み取る

ツールが端末にパスワードを表示しないように、bash スクリプトでパスワードを読み取るにはどうすればよいですか?

(フォントを黒地に黒に変更することは、コピー&ペーストで簡単に回避できるため、解決策にはなりません。)

答え1

からhelp read

-s        do not echo input coming from a terminal

たとえば、ユーザーにプロンプ​​トを表示して任意のパスワードを変数に読み込むにはpasswd

IFS= read -s -p 'Password please: ' passwd

答え2

私はいつもstty -echoエコーをオフにしてから読み取り、その後実行していましたstty echo(詳細については man of stty- ieを参照してman sttyください)。これは、エコーをオフにしてから、Java、C(++)、Python などのプログラミング言語の標準 stdin 「リーダー」を使用してパスワードを読み取ることができるため、プログラマーの観点からはより便利です。

bash では、使用法は次のようになります。

echo -n "USERNAME: "; IFS= read -r uname
echo -n "PASSWORD: "; stty -echo; IFS= read -r passwd; stty echo; echo
program "$uname" "$passwd"
unset -v passwd    # get rid of passwd

たとえば、Python の場合は次のようになります。

from sys import stdout
from os import system as term

uname = raw_input("USERNAME: ") # read input from stdin until [Enter] in 2
stdout.write("PASSWORD: ")
term("stty -echo") # turn echo off
try:
    passwd = raw_input()
except KeyboardInterrupt: # ctrl+c pressed
    raise SystemExit("Password attempt interrupted")
except EOFError: # ctrl+d pressed
    raise SystemExit("Password attempt interrupted")
finally:
    term("stty echo") # turn echo on again

print "username:", uname
print "password:", "*" * len(passwd)

私はこれを Python で何度も実行しなければならなかったので、その観点からはかなりよく理解しています。ただし、これを他の言語に翻訳するのはそれほど難しくありません。

答え3

外部依存関係を追加しても問題ない場合は、dialog や whiptail などのツールによって提供されるパスワード ボックスを使用できます。

ウィップテール

答え4

あなたの質問は「ツールのような方法で???」と少し違っているので、これがあなたにとってうまくいくかどうかは正確にはわかりません。

system1 $ passwd=abc123
system1 $ printf "%s\n" "${passwd//?/*}"
******

関連情報