Programmatically Accessing Keychain Items from the Command Line on macOS Tahoe
While Keychain Access provides a graphical interface, you can also access and manage Keychain items programmatically using the security command-line tool. This is useful for scripting and automation.
The Security Command
The security command is a powerful utility for interacting with the macOS Keychain. It is located in /usr/bin/security.
Listing Keychain Items
To see a list of all items in your default keychain:
security find-generic-password -g
This will prompt you for your password and then display a list of services, account names, and other attributes.
Finding Specific Items
You can filter the results to find specific items.
By Service Name
To find a password for a specific website (service):
security find-internet-password -s "example.com" -g
By Account Name
To find a password for a specific account:
security find-generic-password -a "myusername" -g
Combining Criteria
You can combine criteria to narrow down the search:
security find-internet-password -s "example.com" -a "myusername" -g
Getting the Password
To retrieve the actual password, pipe the output of security to awk:
security find-internet-password -s "example.com" -a "myusername" -g 2>&1 | awk '/password: "(.*)"/'
Adding a New Keychain Item
To add a new generic password item to the keychain:
security add-generic-password -a "accountName" -s "serviceName" -w "mySecretPassword
Warning: Storing passwords directly in scripts is highly discouraged due to security risks. Anyone with access to the script can view the password.
Alternatives:
- Prompt the User: Use a secure input method (e.g., read -s in Zsh) to prompt the user for the password at runtime.
- Environment Variables: Store the password in an environment variable that is not stored in the script itself.
- Prompting at Runtime: Consider using
osascriptto prompt the user for a password via a GUI dialog.
Deleting a Keychain Item
To delete an item from the keychain:
security delete-generic-password -a "accountName" -s "serviceName"
Related Guides
- Managing Passwords with Keychain Access on macOS Tahoe
- Terminal Basics and Zsh Customization on macOS Tahoe