RougeMan a écrit 1 commentaire

  • # clef shh a usage unique ( pour executer un nb restreint de commande )

    Posté par  . En réponse au message Limiter les commandes à une clé ssh. Évalué à 2.

    Utilisation de clef à usage unique


    Sur la machine initiatrice de la communication, il faut générer une paire de clefs, dans
    le répertoire '.ssh' de l'utilisateur.


    cd ~/.ssh
    ssh-keygen -t dsa -f clef_perso

    Veillez à ne laisser que les droits 600 ( rw------- ) pour la clef privée.
    Sur la machine destination de la communication, il faut ajouter la clef publique ~/.ssh/clef_perso.pub obtenue
    précédement au fichier ~/.ssh/authorized_keys

    ou ~/.ssh/authorized_keys2 précédée de :
    command="/qqpart/.ssh/le_script_a_executer",no-port-forwarding,no-X11-forwarding,no-agent-forwarding
    ou
    from="une.addresse.ip.emettrice,une.autre.adresse.ip",command="/qqpart/.ssh/le_script_generique_de_validation_de_commande.sh"
    ou un mélange des deux


    Un script de validation de commande pour faire des rsync
    ou des scp peut prendre la forme :

    #!/bin/bash
    #
    case "$SSH_ORIGINAL_COMMAND" in
    *\&*)
    echo "Refuse"
    ;;
    *\(*)
    echo "Refuse"
    ;;
    *\{*)
    echo "Refuse"
    ;;
    *\;*)
    echo "Refuse"
    ;;
    *\<*)
    echo "Refuse"
    ;;
    *\`*)
    echo "Refuse"
    ;;
    rsync\ --server*)
    $SSH_ORIGINAL_COMMAND
    ;;
    scp\ -f\ /chemin/fichier_a_copier)
    $SSH_ORIGINAL_COMMAND
    ;;
    ls\ /usrtmp)
    $SSH_ORIGINAL_COMMAND
    ;;
    *)
    echo "Refuse"
    ;;
    esac


    Dans le script ci-dessus on a autorisé l'utilisation de rsync , la copie d'un fichier et une commande "ls" bidon.
    Les BackSlash servent à quotter les espaces.
    Le fichier authorized_keys aura les droits 600 (rw-------) , et le fichier de validation 700 (rwx------)


    Pour faire une commande ssh ou scp ou rsync utilisant ces clefs à usage unique il suffit d'utiliser l'option -i.

    ssh usager_distant@machine_distante -i /home_de_l_usager_local/.ssh/clef_perso commande_ou_script
    scp -i /home_de_l_usager_local/.ssh/clef_perso /chemin/fichier_local usager_distant@machine_distante:/chemin/.
    rsync -arv -e "ssh -i /home_de_l_usager_local/.ssh/clef_perso" /chemin/repertoire/source/local/ usager_distant@machine_distante:/repertoire/distant/