web-dev-qa-db-ja.com

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

端末にパスワードを表示しないツールのような方法でbashスクリプトのパスワードを読み取る方法は?

(フォントを黒で黒に変更することは、簡単にコピーして貼り付けることが難しいため、解決策ではありません)

25

help read

-s        do not echo input coming from a terminal

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

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

echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
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で何度もしなければならなかったので、その観点からはかなりよく知っています。ただし、他の言語に翻訳することはそれほど難しくありません。

5
Dylan

あなたの質問は、「ツールのような方法で???」これがうまくいくかどうかは正確にはわかりません:

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