Securely store Passwords into the macOS Keychain
Why put cleartext passwords in scripts, when we can use the macOS Keychain to securely store this information for us.
How to have a easy way to include this into your scripts, so we can have a placeholder for the password rather then leaking this password within the script.
How to
We are going to add an PASSWORD
into the macOS Keychain with the security
command.
For this command we are using -T
to add an entry to the login keychain and add the security
binary to “Always allow access by these applications:” list in the Access Control preferences.
security add-generic-password [-s service] [-a account] [-w password] -T [appPath]
Usage:
-s service Specify service name (required)
-a account Specify account name (required)
-w password Specify password to be added. Put at end of command to be prompted (recommended)
-T appPath Specify an application which may access this item (multiple -T options are allowed)
Example:
security add-generic-password -s `SERVICE-NAME` -a `ACCOUNT-NAME` -w `PASSWORD` -T /usr/bin/security
Now we securely store the PASSWORD
into the macOS Keychain, and allowing the security
binary to access this entry.
We can use the security
command to fetch the PASSWORD
.
security find-generic-password [-s service] -w
Usage:
-s service Match service string
-w Display the password(only) for the item found
We only need to provide the service name and ask for the password
Example:
security find-generic-password -s `SERVICE-NAME` -w
#RESULT
`PASSWORD`
Now we can include this placeholder into the scripts, and fetch the PASSWORD
in a secure way.
# Variables
serviceName=SERVICE-NAME
password=$(security find-generic-password -s ${serviceName} -w)
See the man page security in terminal for more options. man security