__complete_ssh_host() { local ssh_known_file ssh_known_list partial_word ssh_known_file="${HOME}/.ssh/known_hosts" [[ -r "${ssh_known_file}" ]] || return 1 ssh_known_list=$(awk '{print $1}' "${HOME}"/.ssh/known_hosts | tr ',' '\n' | sort | uniq) partial_word="${COMP_WORDS[COMP_CWORD]}"; mapfile -t COMPREPLY < <(compgen -W "${ssh_known_list}" -- "${partial_word}") return 0 } complete -F __complete_ssh_host ssh complete -f -F __complete_ssh_host scp