Notes // How to Disable ZSH SSH Hosts Completion

Disable /etc/hosts when zsh is autocompleting ssh commands.

Problem with ZSH SSH Autocompletion

The zsh auto-completion feature is fantastic. Most Linux utilities have very intuitive autocompletions. I use the ssh completions daily, having configured all of my ssh connections in the ~/.ssh/config file. It was running great for a long time, but then seemingly out of nowhere, a few months ago, it started hanging for more than 30 seconds. This was very annoying. I had a few minutes today and thought that I would research a solution.

It turns out that the zsh completion module searches through the /etc/hosts file to autocomplete the host portion of the ssh command. My /etc/hosts file has thousands of entries. A few months ago, around the time that my ssh autocompletion started to hang, I had configured a variant of the unified hosts to block thousands of domains in my /etc/hosts file. But I don't use /etc/hosts for ssh host lookups, I have them configured in ~/.ssh/config.

How to Disable ZSH SSH Hosts Completion

Like most aspects of zsh, it is easy to configure the completion module to ignore the /etc/hosts lookup for ssh.

Here is the line I added to my .zshrc file:

zstyle ':completion:*:ssh:*' hosts off

The :completion:*:ssh:* portion of the configuration targets ssh commands. hosts off disables the domain lookup in /etc/hosts.

With this configuration tweak ssh autocompletion is snappy again.

Written by
Email destin{AT} if you have any comments or questions.