1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- ############################################################
- # 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
- _ssh_hosts=($(
- egrep '^Host.*' "$_ssh_configfile" |\
- awk '{for (i=2; i<=NF; i++) print $i}' |\
- sort |\
- uniq |\
- grep -v '^*' |\
- sed -e 's/\.*\*$//'
- ))
- zstyle ':completion:*:hosts' hosts $_ssh_hosts
- unset _ssh_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
- }
|