autocomplete hosts from hosts sections in ssh-config, two functions to load/unload keys from the agent (e.g. for use in .zshrc)

This commit is contained in:
Frank Wittig 2014-04-09 12:20:12 +02:00
commit a2f3ec58f7

View file

@ -0,0 +1,39 @@
############################################################
# 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.
local hosts
if [[ -f $HOME/.ssh/config ]]; then
hosts=($(cat $HOME/.ssh/config | egrep '^Host.*' | awk '{print $2}' | grep -v '^*' | sed -e 's/\.*\*$//' | grep '\.'))
zstyle ':completion:*:hosts' hosts $hosts
fi
############################################################
# Remove host key from known hosts based on a host section
# name from .ssh/config
function ssh_rmhkey {
if [[ "x$1" == "x" ]]; then return; fi
ssh-keygen -R $(grep -A10 $1 ~/.ssh/config | 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 [[ "$key" == "" ]]; then return; fi
if ( ! ssh-add -l | grep -q $key ); then
ssh-add ~/.ssh/$key;
fi
}
############################################################
# Remove SSH key from agent
function ssh_unload_key {
local key=$1
if [[ "$key" == "" ]]; then return; fi
if ( ssh-add -l|grep -q $key ); then
local keyfile=$(ssh-add -l | grep $key | cut -d ' ' -f 3)
ssh-add -d $keyfile
fi
}