fzf可以读~/.ssh/config
文件来补全ssh命令,用着很方便。有一点不足就是只能显示Host,主机太多记不住,最好能有个长一点的描述。
我把.fzf/shell/completion.bash
里的_fzf_complete_ssh
函数稍微改造了一下,可以显示Hostname外加一个描述字段#Desc
_fzf_complete_ssh() {
_fzf_complete '+m' "$@" < <(
cat ~/.ssh/config ~/.ssh/config.d/* /etc/ssh/ssh_config 2> /dev/null | grep -i -e '^host ' -e 'hostname' -e '#Desc' | grep -v '[*?]' | \
awk '/^Host/{if (NR!=1)print ""; printf $2} /Hostname/{printf " [%s]",$2} /#Desc/{printf " [%s]",$2}' | sort -u
)
}
_fzf_complete_ssh_post() {
awk '{printf $1}'
}
complete -F _fzf_complete_ssh -o default -o bashdefault ssh
比如~/.ssh/config
配置成:
Host server-gpu
Hostname 192.168.10.214
User emacs
#Desc GPU机器
Host server-1
Hostname 172.16.1.201
User emacs
#Desc 服务部署机器
Host server-ftp
Hostname 172.16.1.182
User emacs
#Desc FTP服务器
补全效果: