2a603856598eafc3c8a0bde80f8a885d2a81dfee

Author
François Scala <github@arcenik.net>
Committer
Marc Cornellà <marc.cornella@live.com>
Date

Message

ssh-agent: use key signatures to check loaded ids (#7504)

Use fingerprint of ssh key instead of file name to control if the key is already loaded.

Also check for .ssh folder presence (#5128)

Diff

 1diff --git a/plugins/ssh-agent/ssh-agent.plugin.zsh b/plugins/ssh-agent/ssh-agent.plugin.zsh
 2index a688855d06f86d2db3d2b883c54fb2706c29d0da..2a860f3aa5a5e1fe0df8fe265b91a596a48c6439 100644
 3--- a/plugins/ssh-agent/ssh-agent.plugin.zsh
 4+++ b/plugins/ssh-agent/ssh-agent.plugin.zsh
 5@@ -12,16 +12,28 @@ function _start_agent() {
 6 }
 7 
 8 function _add_identities() {
 9-	local id line
10-	local -a identities ids
11+	local id line sig
12+	local -a identities loaded signatures
13 	zstyle -a :omz:plugins:ssh-agent identities identities
14 
15-	# get list of loaded identities
16-	for line in ${(f)"$(ssh-add -l)"}; do ids+=${${(z)line}[3]}; done
17+	# check for .ssh folder presence
18+	if [[ ! -d $HOME/.ssh ]]; then
19+		return
20+	fi
21+
22+	# get list of loaded identities' signatures
23+	for line in ${(f)"$(ssh-add -l)"}; do loaded+=${${(z)line}[2]}; done
24+
25+	# get signatures of private keys
26+	for id in $identities; do
27+		signatures+="$(ssh-keygen -lf "$HOME/.ssh/$id" | awk '{print $2}')	$id"
28+	done
29 
30 	# add identities if not already loaded
31-	for id in ${^identities}; do
32-		[[ ${ids[(I)$HOME/.ssh/$id]} -le 0 ]] && ssh-add $HOME/.ssh/$id
33+	for sig in $signatures; do
34+		id="$(cut -f2 <<< $sig)"
35+		sig="$(cut -f1 <<< $sig)"
36+		[[ ${loaded[(I)$sig]} -le 0 ]] && ssh-add $HOME/.ssh/$id
37 	done
38 }
39