Как настроить автодополнение в zsh для ssh хостов взятых из ~/.ssh/known_hosts


ramok аватар

ramok - Posted on 18 Февраль 2006

добавляем в ~/.zshrc
ssh_hosts=($hosts ${${${(f)"$(<$HOME/.ssh/known_hosts)"}%%\ *}%%,*})
# automatically remove duplicates from these arrays
typeset -U ssh_hosts
zstyle ':completion:*:hosts' hosts $ssh_hosts
zstyle ':completion:*:(ssh|scp|sftp):*' tag-order '! users' #не добавлять юзера
проверяем запустив новый шел и набрав ssh [TAB] должно выдавать хосты на которые когда то были заходы по ssh дополнительные хосты которые вы хотите что бы автодополнялись можно заносить в массив $hosts перед приведенными командами.

BUGS
если вместо хостов выдается что то типа
\|1\|@#sdfb23t4wvDFV23efwaaavsdv=
то это значит что используется хеширование хостов в ssh. Придется делать выбор между безопасностью (кто то может узнать куда вы конектились) или удобством. Если выбрали удобство то
$ echo HashKnownHosts no >> ~/.ssh/config
и удалить все срочки в ~/.ssh/known_hosts начинающиеся с '|'
$ sed -i '/^|/d' ~/.ssh/known_hosts 



0
Ваша оценка: Ничего

known_hosts штука полезная, но можно занести хосты, на которые вы часто "ходите", в /etc/hosts и, при включенном автополнении, например таком:

autoload -U compinit
compinit
autoload -U incremental-complete-word
zle -N incremental-complete-word
autoload -U insert-files
zle -N insert-files
autoload -U predict-on
zle -N predict-on

zsh после ssh @Tab показывает хосты из /etc/hosts.