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 :
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.
# clef shh a usage unique ( pour executer un nb restreint de commande )
Posté par RougeMan . En réponse au message Limiter les commandes à une clé ssh. Évalué à 2.
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/