
ツールが端末にパスワードを表示しないように、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
答え4
あなたの質問は「ツールのような方法で???」と少し違っているので、これがあなたにとってうまくいくかどうかは正確にはわかりません。
system1 $ passwd=abc123
system1 $ printf "%s\n" "${passwd//?/*}"
******