As entradas em ~/.ssh/known_hosts
estão com hash e, portanto, não podem ser lidas por bash-completion
, consulte este bug e uma pergunta semelhante no Unix.SE .
Como solução alternativa, há este script (veja também aqui para comentários) para ~/.profile
:
_complete_ssh_hosts ()
{
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
comp_ssh_hosts='cat ~/.ssh/known_hosts | \
cut -f 1 -d ' ' | \
sed -e s/,.*//g | \
grep -v ^# | \
uniq | \
grep -v "\[" ;
cat ~/.ssh/config | \
grep "^Host " | \
awk '{print }'
'
COMPREPLY=( $(compgen -W "${comp_ssh_hosts}" -- $cur))
return 0
}
complete -F _complete_ssh_hosts ssh
Outra tentativa de contornar esse problema pode ser encontrada nesta resposta no Unix.SE :
_ssh()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts=$(grep '^Host' ~/.ssh/config ~/.ssh/config.d/* | grep -v '[?*]' | cut -d ' ' -f 2-)
COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
return 0
}
complete -F _ssh ssh
Infelizmente, não posso testá-lo agora, mas você pode experimentar os dois. O segundo parece muito mais simples para mim, eu esperaria que ele fosse mais rápido.