How to get a password from a shell script without echoing
我有一个脚本,可以自动执行需要访问受密码保护系统的过程。系统通过接受用户密码作为参数的命令行程序访问。
我想提示用户输入他们的密码,将其分配给一个shell变量,然后使用该变量构造访问程序的命令行(当然,这将生成我将处理的流输出)。
我是bourne/bash中相当有能力的shell程序员,但是我不知道如何在不让用户输入回显到终端的情况下接受它(或者可能让它使用"*"字符进行回显)。
有人能帮忙吗?
这里是另一种方式来做:
1 2 3 4 5 6 7 | #!/bin/bash # Read Password echo -n Password: read -s password echo # Run Command echo $password |
"你想关
a POSIX标准的答案。通知
1 2 3 4 5 6 7 | #!/bin/sh stty -echo printf"Password:" read PASSWORD stty echo printf" " |
一个内衬;
1 | read -s -p"Password:" password |
在Linux(和Cygwin的bash)本作品在形式和SH。它可能需要的标准UNIX下SH,但。
更多的信息和选择,在bash中,型的"帮助读"。
1 2 3 4 5 6 7 8 | $ help read read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...] Read a line from the standard input and split it into fields. ... -p prompt output the string PROMPT without a trailing newline before attempting to read ... -s do not echo input coming from a terminal |
这是一个选择
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #!/bin/sh # Read secret string read_secret() { # Disable echo. stty -echo # Set up trap to ensure echo is enabled before exiting if the script # is terminated while echo is disabled. trap 'stty echo' EXIT # Read secret. read"$@" # Enable echo. stty echo trap - EXIT # Print a newline because the newline entered by the user after # entering the passcode is not echoed. This ensures that the # next line of output begins at a new line. echo } |
这个函数很相似
1 2 3 4 5 6 7 8 9 10 | [susam@cube ~]$ read a b c foo \bar baz \qux [susam@cube ~]$ echo a=$a b=$b c=$c a=foo b=bar c=baz qux [susam@cube ~]$ unset a b c [susam@cube ~]$ read_secret a b c [susam@cube ~]$ echo a=$a b=$b c=$c a=foo b=bar c=baz qux [susam@cube ~]$ unset a b c |
这里是另一个选择是使用一个反斜线
1 2 3 4 5 6 7 8 9 10 | [susam@cube ~]$ read -r a b c foo \bar baz \qux [susam@cube ~]$ echo a=$a b=$b c=$c a=foo b=\bar c=baz \qux [susam@cube ~]$ unset a b c [susam@cube ~]$ read_secret -r a b c [susam@cube ~]$ echo a=$a b=$b c=$c a=foo b=\bar c=baz \qux [susam@cube ~]$ unset a b c |
最后,这里是如何使用的例子,显示
1 2 3 | printf"Password:" read_secret password # Do something with $password here ... |
我发现了一个漫游
1 | password=$(/lib/cryptsetup/askpass"Give a password") |
输入字符是由一个取代的*。湖:*给密码
所以,你可以设置密码提示没有变。当前在做什么样本:壳
1 | $(read -s;echo $REPLY) |
例如:
1 | my-command --set password=$(read -sp"Password:";echo $REPLY) |
你可以添加一些论文prompted值与线的突破,是这样做的:
1 2 3 | my-command --set user=$(read -sp"`echo $' '`User:";echo $REPLY) --set password=$(read -sp"`echo $' '`Password:";echo $REPLY) |
这个链接是帮助确定,*如何使用密码和读取它没有回声回的终端.*如何*每个字符一个字符替换。
http:///www.tutorialkart.com bash Bash Shell脚本读取用户名和密码/
这些人是第一,如果要存储在文件的任何密码,我会确保它的散列。它不是最好的,但至少它的安全,将不在纯文本。
第一个哈希密码和创建它:
1 | echo"password123" | md5sum | cut -d '-' -f 1 > /tmp/secret |
现在,创建您的项目使用的哈希。本案例中,这个小程序接收用户输入一个密码,没有引用,然后把它与存储的哈希散列的一个相比。如果它匹配存储的哈希,然后接入是样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #!/bin/bash PASSWORD_FILE="/tmp/secret" MD5_HASH=$(cat /tmp/secret) PASSWORD_WRONG=1 while [ $PASSWORD_WRONG -eq 1 ] do echo"Enter your password:" read -s ENTERED_PASSWORD if ["$MD5_HASH" !="$(echo $ENTERED_PASSWORD | md5sum | cut -d '-' -f 1)" ]; then echo"Access Deniend: Incorrenct password!. Try again" else echo"Access Granted" PASSWORD_WRONG=0 fi done |