浏览代码

feat(ssh): add plugin (#12186)

Closes #2707 

Co-authored-by: Frank Wittig <frank.wittig@here.com>
Co-authored-by: Frank Wittig <frank@e5k.com>
Frank Dana 1 年之前
父节点
当前提交
8b2ce98578
共有 1 个文件被更改,包括 46 次插入0 次删除
  1. 46 0
      plugins/ssh/ssh.plugin.zsh

+ 46 - 0
plugins/ssh/ssh.plugin.zsh

@@ -0,0 +1,46 @@
+############################################################
+# Take all host sections in .ssh/config and offer them for
+# completion as hosts (e.g. for ssh, rsync, scp and the like)
+# Filter out wildcard host sections.
+_ssh_configfile="$HOME/.ssh/config"
+if [[ -f "$_ssh_configfile" ]]; then
+  _hosts=($(egrep '^Host.*' "$_ssh_configfile" | awk '{print $2}' | grep -v '^*' | sed -e 's/\.*\*$//'))
+  zstyle ':completion:*:hosts' hosts $_hosts
+  unset _hosts
+fi
+unset _ssh_configfile
+
+############################################################
+# Remove host key from known hosts based on a host section
+# name from .ssh/config
+function ssh_rmhkey {
+  local ssh_configfile="$HOME/.ssh/config"
+  local ssh_host="$1"
+  if [[ -z "$ssh_host" ]]; then return; fi
+  ssh-keygen -R $(grep -A10 "$ssh_host" "$ssh_configfile" | grep -i HostName | head -n 1 | awk '{print $2}')
+}
+compctl -k hosts ssh_rmhkey
+
+############################################################
+# Load SSH key into agent
+function ssh_load_key() {
+  local key="$1"
+  if [[ -z "$key" ]]; then return; fi
+  local keyfile="$HOME/.ssh/$key"
+  local keysig=$(ssh-keygen -l -f "$keyfile")
+  if ( ! ssh-add -l | grep -q "$keysig" ); then
+    ssh-add "$keyfile"
+  fi
+}
+
+############################################################
+# Remove SSH key from agent
+function ssh_unload_key {
+  local key="$1"
+  if [[ -z "$key" ]]; then return; fi
+  local keyfile="$HOME/.ssh/$key"
+  local keysig=$(ssh-keygen -l -f "$keyfile")
+  if ( ssh-add -l | grep -q "$keysig" ); then
+    ssh-add -d "$keyfile"
+  fi
+}