浏览代码

feat(ssh-agent): allow specifying absolute path to `identities`

Fixes #9650
Marc Cornellà 3 年之前
父节点
当前提交
4a69ee575c
共有 2 个文件被更改,包括 16 次插入5 次删除
  1. 9 0
      plugins/ssh-agent/README.md
  2. 7 5
      plugins/ssh-agent/ssh-agent.plugin.zsh

+ 9 - 0
plugins/ssh-agent/README.md

@@ -27,6 +27,15 @@ To **load multiple identities** use the `identities` style, For example:
 zstyle :omz:plugins:ssh-agent identities id_rsa id_rsa2 id_github
 ```
 
+**NOTE:** the identities may be an absolute path if they are somewhere other than
+`~/.ssh`. For example:
+
+```zsh
+zstyle :omz:plugins:ssh-agent identities ~/.config/ssh/id_rsa ~/.config/ssh/id_rsa2 ~/.config/ssh/id_github
+# which can be simplified to
+zstyle :omz:plugins:ssh-agent identities ~/.config/ssh/{id_rsa,id_rsa2,id_github}
+```
+
 ----
 
 To **set the maximum lifetime of the identities**, use the `lifetime` style.

+ 7 - 5
plugins/ssh-agent/ssh-agent.plugin.zsh

@@ -23,12 +23,12 @@ function _start_agent() {
 }
 
 function _add_identities() {
-  local id line sig lines
+  local id file line sig lines
   local -a identities loaded_sigs loaded_ids not_loaded
   zstyle -a :omz:plugins:ssh-agent identities identities
 
   # check for .ssh folder presence
-  if [[ ! -d $HOME/.ssh ]]; then
+  if [[ ! -d "$HOME/.ssh" ]]; then
     return
   fi
 
@@ -52,10 +52,12 @@ function _add_identities() {
 
   # add identities if not already loaded
   for id in $identities; do
+    # if id is an absolute path, make file equal to id
+    [[ "$id" = /* ]] && file="$id" || file="$HOME/.ssh/$id"
     # check for filename match, otherwise try for signature match
-    if [[ ${loaded_ids[(I)$HOME/.ssh/$id]} -le 0 ]]; then
-      sig="$(ssh-keygen -lf "$HOME/.ssh/$id" | awk '{print $2}')"
-      [[ ${loaded_sigs[(I)$sig]} -le 0 ]] && not_loaded+=("$HOME/.ssh/$id")
+    if [[ ${loaded_ids[(I)$file]} -le 0 ]]; then
+      sig="$(ssh-keygen -lf "$file" | awk '{print $2}')"
+      [[ ${loaded_sigs[(I)$sig]} -le 0 ]] && not_loaded+=("$file")
     fi
   done