I would like to read a password from stdin, suppress its output and encode it with base64, like so:
read -s|openssl base64 -e
What is the right command for that?
The read command sets bash variables, it doesn't output to stdout.
e.g. put stdout into nothing1 file and stderr into nothing2 file and you will see nothing in these files (with or without -s arg)
read 1>nothing1 2>nothing2 # you will see nothing in these files (with or without -s arg) # you will see the REPLY var has been set echo REPLY=$REPLY
So you probably want to do something like:
read -s pass && echo $pass |openssl base64 -e # Read user input into $pass bash variable. # If read command is successful then echo the $pass var and pass to openssl command.
from man bash SHELL BUILTIN COMMANDS read command:
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...] One line is read from the standard input, or from the file descriptor fd supplied as an argument to the -u option, and the first word is assigned to the first name, the second word to the second name, and so on, with leftover words and their intervening separators assigned to the last name. -s Silent mode. If input is coming from a terminal, characters are not echoed. If no names are supplied, the line read is assigned to the variable REPLY.
echo $pass |openssl base64 -ethe cleartext password might be visible using
opensslis running. — Dec 09, 2019 at 14:17