ツールが端末にパスワードを表示しない方法で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
(stty
詳細については男を見ながら読んでくださいman stty
)。プログラマの観点から見ると、これはエコーをオフにし、標準入力「リーダー」を使用してJava、C(++)、Pythonなどのプログラミング言語からパスワードを読み取ることができるため、より便利です。
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//?/*}"
******