From 2e746384bfe058f8631b24537ac6f67c88786e1e Mon Sep 17 00:00:00 2001 From: mikhailde Date: Thu, 10 Oct 2024 14:13:25 +0300 Subject: [PATCH] fix(ssh-agent): add support for any OpenSSH key The ssh-agent plugin now adds all files in `~/.ssh/` that start with `-----BEGIN OPENSSH PRIVATE KEY-----`, regardless of their name. This fixes an issue where the plugin was only adding keys with hardcoded names. This change ensures that any valid OpenSSH private key will be added to the ssh-agent, improving compatibility and flexibility for users with custom key names. --- plugins/ssh-agent/ssh-agent.plugin.zsh | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/plugins/ssh-agent/ssh-agent.plugin.zsh b/plugins/ssh-agent/ssh-agent.plugin.zsh index 83548648b..7b4a5ff34 100644 --- a/plugins/ssh-agent/ssh-agent.plugin.zsh +++ b/plugins/ssh-agent/ssh-agent.plugin.zsh @@ -39,13 +39,16 @@ function _add_identities() { return fi - # add default keys if no identities were set up via zstyle - # this is to mimic the call to ssh-add with no identities - if [[ ${#identities} -eq 0 ]]; then - # key list found on `ssh-add` man page's DESCRIPTION section - for id in id_rsa id_dsa id_ecdsa id_ed25519 id_ed25519_sk identity; do - # check if file exists - [[ -f "$HOME/.ssh/$id" ]] && identities+=($id) + # If no keys specified in zstyle, add default keys. + # Mimics calling ssh-add with no arguments. + if [[ ${#identities[@]} -eq 0 ]]; then + # Iterate over files in .ssh folder. + for file in "$HOME/.ssh"/*; do + # Check if file is a regular file and starts with "-----BEGIN OPENSSH PRIVATE KEY-----". + if [[ -f "$file" && $(head -n 1 "$file") =~ ^-----BEGIN\ OPENSSH\ PRIVATE\ KEY----- ]]; then + # Add filename (without path) to identities array. + identities+=("${file##*/}") + fi done fi