mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2025-04-09 18:57:08 +00:00
Merge 1152d283fe
into fa396ad771
This commit is contained in:
commit
6d5dc8c8f6
|
@ -1,7 +1,8 @@
|
|||
# ssh plugin
|
||||
|
||||
This plugin provides host completion based off of your `~/.ssh/config` file, and adds
|
||||
some utility functions to work with SSH keys.
|
||||
This plugin provides host completion based off of your `~/.ssh/config` file,
|
||||
and adds some utility functions to work with SSH keys. If the `~/.ssh/config`
|
||||
contains `Include` directives, the plugin also parse hosts in related files.
|
||||
|
||||
To use it, add `ssh` to the plugins array in your zshrc file:
|
||||
|
||||
|
|
|
@ -2,20 +2,49 @@
|
|||
# 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
|
||||
# If the .ssh/config has Include directives, load them too.
|
||||
function _load_ssh_hosts {
|
||||
local conf="$1"
|
||||
if [[ -f "$conf" ]]; then
|
||||
local _ssh_hosts=($(
|
||||
egrep '^Host\ .*' "$conf" |\
|
||||
awk '{for (i=2; i<=NF; i++) print $i}' |\
|
||||
sort |\
|
||||
uniq |\
|
||||
grep -v '^*' |\
|
||||
sed -e 's/\.*\*$//'
|
||||
))
|
||||
echo "${_ssh_hosts[@]}"
|
||||
fi
|
||||
}
|
||||
|
||||
# XXX: We could make it recursive but won't implement for now
|
||||
function _find_include_files {
|
||||
local conf="$1"
|
||||
if [[ -f "$conf" ]]; then
|
||||
egrep '^Include\ .*' "$conf" |\
|
||||
awk '{for (i=2; i<=NF; i++) print $i}'
|
||||
fi
|
||||
}
|
||||
|
||||
all_hosts=($(_load_ssh_hosts "$HOME/.ssh/config"))
|
||||
|
||||
_find_include_files "$HOME/.ssh/config" | while read include_file; do
|
||||
# omz doesn't know "~" directory
|
||||
if [[ "$include_file" == ~* ]]; then
|
||||
include_file="${HOME}${include_file:1}"
|
||||
fi
|
||||
if [[ -f "$include_file" ]]; then
|
||||
hosts=($(_load_ssh_hosts "$include_file"))
|
||||
all_hosts+=("${hosts[@]}")
|
||||
fi
|
||||
done
|
||||
|
||||
zstyle ':completion:*:hosts' hosts "${all_hosts[@]}"
|
||||
|
||||
unset -f _load_ssh_hosts
|
||||
unset -f _find_include_files
|
||||
unset all_hosts
|
||||
|
||||
############################################################
|
||||
# Remove host key from known hosts based on a host section
|
||||
|
|
Loading…
Reference in New Issue
Block a user