ssh命令 使用TAB补全主机名的设置

  • 打开或创建~/.bashrc文件, 添加以下内容:
__complete_ssh_host() {

    ## 获取需要补全的单词
    local KNOWN_FILE=~/.ssh/known_hosts
    if [ -r $KNOWN_FILE ]; then
        local KNOWN_LIST=$(cut -f 1 -d ' ' $KNOWN_FILE | cut -f 1 -d ',' | grep -v '^[0-9[]')
    fi
    local CONFIG_FILE=~/.ssh/config
    if [ -r $CONFIG_FILE ]; then
        local CONFIG_LIST=$(awk '/^Host [A-Za-z]+/ {print $2}' $CONFIG_FILE)
    fi
    local HOSTS_FILE=/etc/hosts
    if [ -r $HOSTS_FILE ]; then
        local HOSTS_LIST=$(awk '/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ {print $2}' $HOSTS_FILE)
    fi

    ## COMP_CWORD: 包含了当前命令行的所有单词 ; COMP_CWORD: 光标所在的单词在 COMP_WORDS 数组中的索引
    local PARTIAL_WORD="${COMP_WORDS[COMP_CWORD]}"  

    ## 使用compgen命令生成补全列表并进行筛选
    COMPREPLY=( $(compgen -W "$KNOWN_LIST$IFS$CONFIG_LIST$IFS$HOSTS_LIST" -- "$PARTIAL_WORD") )
    return 0
}

## 指定在调用ssh、scp时,使用函数进行tab补全
complete -F __complete_ssh_host ssh
complete -F __complete_ssh_host scp
  • source ~/.bashrc
  • 然后ssh 命令后按TAB,可以看到补全列表。
posted @ 2024-02-26 15:33  武平宁  阅读(98)  评论(0)    收藏  举报