组织 ssh 别名

组织 ssh 别名

我的.ssh/config别名开始增多,记住它们也变得越来越困难。

您有什么建议可以更好地管理这个不断增长的收藏吗?

例如,当我输入ssh某种类型时自动完成?

答案1

Bash 的一个相当糟糕的1补全:

function _ssh_complete () {
    local match=${COMP_WORDS[${COMP_CWORD}]}
    local hosts=
    local default=

    local _ssh_complete_hostlist=$( \
        grep "^\s*Host\s*=" ~/.ssh/config 2>/dev/null \
            | sed -r "s/^[^=]+= *//;s/ /\n/g" \
            | sort )

    for h in $_ssh_complete_hostlist; do
        if [[ $h =~ ^$match ]]; then
            hosts="$hosts $h"
        fi
    done
    if ! (( ${COMP_CWORD} == ${#COMP_WORDS[@]}-1 )); then
        default=$( compgen -f ${COMP_WORDS[${COMP_CWORD}]} )
    fi
    COMPREPLY=($hosts $default)
}
complete -F _ssh_complete ssh

您可能希望$_ssh_complete_hostlist在完成函数之外进行初始化(例如,在 shell 初始化期间),否则每次完成试验都会生成三个程序。配置文件不会经常更改,因此您可以在需要时手动调用初始化函数。

1)例如,它仅在行尾完成,因此您必须先声明任何选项,然后才开始输入并完成远程主机名。

相关内容