Complétion automatique des hosts via annuaire LDAP

Si, comme moi, vous avez un annuaire LDAP, et que vous souhaitez profiter de la complétion auto sous bash pour la liste des hosts, alors lisez ce qui suit, c'est très simple :)

Tout d'abord, il faut avoir un annuaire LDAP d'installé, et configuré, si possible, avec un la possibilité de lire l'annuaire sans .

Ensuite, il vous suffit de créer un fichier ldap_hosts (avec les droits 0644) dans le dossier /etc/bash_completion.d/ et y mettre ce qui suit :

_ldap_hosts() 
{
    local cur prev user suffix aliases hosts ssh hostreply
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
 
        [ "$1" = -a ] || [ "$2" = -a ] && aliases='yes'
        [ "$1" = -c ] || [ "$2" = -c ] && suffix=':'
        [[ $cur == *@* ]] && user=${cur%@*}@ && cur=${cur#*@}
 
    hosts=( `ldapsearch -h ldap.cp2i.com -b "ou=hosts,dc=cp2i,dc=com" -LLL -s sub -z 100 -x "cn=$cur*" "cn" 2>/dev/null | awk '/^cn/ { print $2 }'` )
 
        # apply prefix and suffix
        for (( i=0; i < ${#hosts[@]}; i++ )); do
                hosts[i]=$user${hosts[i]}$suffix
        done
        COMPREPLY=( ${COMPREPLY[@]} ${hosts[@]} )
}
 
declare -f _old_known_hosts >/dev/null
if [ $? -ne 0 ];then
        declare -f _known_hosts >/dev/null
        if [ $? -eq 0 ];then
                tmpfile=$(cat <<EOF
_old_known_hosts()
$(declare -f _known_hosts | tail --lines=+2)
 
_known_hosts() {
        _old_known_hosts \$* 
        _ldap_hosts \$* 
}
EOF
)
                eval "$tmpfile"
        fi  
fi

Modifiez bien les paramètres de connexion à votre annuaire (paramètres -h et -b de la fonction ldapsearch) pour qu'il corresponde aux paramètres de votre annuaire, reconnectez-vous, et vous devriez avoir la complétion auto des hosts de votre annuaire dans vos commandes shell du style ssh ou scp.

Bonne utilisation :)

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet