Complétion automatique des hosts via annuaire LDAP
Par zokar le vendredi, janvier 28 2011, 09:44 - Sysadmin - Lien permanent
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