Is it possible to pass passwords on a shell script?
Solution 1:
By "entering passwords", you likely mean entering data without being visible for the user.
(suggested by geirha) When using bash, you can use the -s
option to prevent typed characters from being displayed:
read -p "Password please: " -s pass
Alternatively, change the behavior of the terminal to hide typed characters with stty -echo
(disable echo
). After reading the password with the shell built-in read
into a variable (in the below example, $pass
), turn it back on with stty echo
. Because the new line from Enter is hidden to, you've to print a newline to get future output on a new line.
stty -echo
read -p "Password please: " pass
stty echo
printf '\n'
read
and printf
are shell built-ins. stty
is provided by the coreutils
package which is installed by default. That means that this snippet is very portable.
Note: the -p
option is not standard, but from bash
. If you need to display a prompt in other shells, use:
printf "Password please: "
stty -echo
read pass
stty echo
printf '\n'
References:
- Manual page of
stty
- Manual page of
bash
Solution 2:
To which program do you want to pass a password?
The script on the link works for me. Note that is not a shell script but an expect script (needs the package expect
to be installed`). Using expect is a common way to automate text based interactive programs.
Non-interactive ssh
logins are often done using key-based authentication with an empty passphrase.
Some other programs (like sudo
) have options to read a password from stdin.
Providing a password as a command line option is often a security problem as on most systems any user can see any other users processes including there command line arguments using simple tools like ps
.
Solution 3:
A script should never really handle passwords. Have whichever application needs the password ask for it itself, or if that's not possible, find a better means of authenticating with the application. Please read http://mywiki.wooledge.org/BashFAQ/069