Accès aux Épreuves

La Clé Publique SSH & Commande DU (UNIX)

En travaillant dans mon entreprise, j'ai du faire un script qui se connectait sur plusieurs serveurs (dont 1 qui n'était pas dans le même domaine) pour récuperer les informations nécessaires à une base de données.

j'ai donc écris dans mon script :

ssh -f root@serveur.domaine.fr 'cd /env/database/mysql/data_gaia/MYCNG/ ; du -kL --max-depth=1 *' |awk -v Quote='"' '{print "update MDB_DATABASE SET dat_taille="Quote $1 Quote" WHERE dat_nom="Quote $2 Quote" and dat_serveur_db_id=8;"}' >> ~baumert/SQL/taille_base.sql

ici, pour faire simple, je me connecte sur "serveur.domaine.fr" avec l'utilisateur root via SSH et je lance la commande :

cd /env/database/mysql/data_serveur/MYTEST/

suivi de la commande :

du -kL --max-depth=1 *

je fais ensuite un "pipe" sur ma petite commande SSH qui va récupérer les données qu'elle me retourne et je les insèrent dans une commande AWK. Cette commande AWK va concaténer du texte avec les résultats de la commande SSH. Ceci va me permettre de génerer un fichier blindé de commandes prêtes à être lancées ! (le fichier ~baumert/SQL/taille_base.sql que vous voyez à la fin de la commande)

Pour les curieux, je vais expliquer cette commande :

du -kL --max-depth=1 *

"du" signifie "Disk Usage". Cette commande retourne des statistiques sur l'utilisation du disque. (la taille des fichiers, des liens symboliques...). Pour faire mon script, je ne l'ai pas choisie par hasard, elle a une particularité par rapport aux liens symboliques qui m'intéressait. Cette commande est capable de prendre en compte l'espace utilisé par le fichier ou le répertoire pointé par le lien, à la place de l'espace utilisé seulement par le lien. Je m'explique :

imaginez vous sur windows. Vous avez un dossier avec toutes vos photos de vacances ! Ce fichier plein de photos pèse 10 gigas, et il est situé au fin fond de votre disque dur... par exemple ici : C:/Users/Kikoololdu77/AppData/Local/photos/"vacances de merde"

Vous êtes bien évidemment un être humain, et donc vous en avez ras le bol de devoir tout le temps aller dans ce putain d'fichier complètement paumé dès que vous voulez voir votre tronche de merde sur une photo d'merde prise par une mamy d'merde de 98 balais. Vous faites donc un raccourci. Clic droit => créer un raccourci. Et hop ! vous le mettez sur votre bureau. Aller je suis gentil je vous met une image.

image de merde

Et la, pour une raison quelconque, vous faites "clic droit => propriétés" sur votre raccourci et vous allez voir dans l'onglet "général" pour savoir combien pèse toutes vos photos (vous ne savez pas encore que les photos pèsent 10gigas ;). et la, windows vous dit : "Taille = 1,68 Ko (1 724 octets)" ! WTF ? 350 photos et même pas 2 ko de données ?

Haha, et bien oui maiiiis non... le raccourci ne "copie" en aucun cas les données de votre dossier. Il crée juste un petit dossier avec le lien du dossier contenant vos données. Et ce lien pèse 1,68 Ko (1 724 octets) dans notre cas... Pour voir combien pèsent vos images il faudra aller dans le dossier ORIGINAL et faire "clic droit => propriétés" sur le fichier qui contient vos photos ET NON PAS SUR LE RACCOURCI

maintenant que vous savez ça, retournons à notre commande du et relisez cette phrase ;)

Cette commande est capable de prendre en compte l'espace utilisé par le fichier ou le répertoire pointé par le lien, à la place de l'espace utilisé seulement par le lien.

Comme, dans mon entreprise, il y a beaucoup de liens symboliques, ça m'évite d'aller voir dans CHAQUE DOSSIERS ORIGINAUX la taille que fait certains fichiers... bref, maintenant que les curieux sont comblés retournons à notre SSH !

Donc, vu que dans ma commande je tape "ssh -f root@serveur.domaine.fr", la commande demande une connexion au serveur "serveur.domaine.fr" et nous demande donc... le mot de passe root ! C'est chiant ça... moi qui voulait que le script se lance tout seul et fasse sa petite vie en autonomie... si il demande un mot de passe à chaque fois, ça va pas le faire...
Je vais donc, récupérer la clé publique du serveur sur lequel je travaille, et la donner au serveur de destination. Je vais donc (sur mon serveur A) aller dans :

cd /root/.ssh/id_rsa.pub

Vous copiez TOUT le texte qu'il y a la dedans. Il s'agit de votre clé publique. Puis vous la copiez / collez sur le serveur B (le serveur cible) dans :

cd /root/.ssh/authorized_keys

Une fois la clé publique collée vous pourrez taper "ssh -f root@serveur.domaine.fr" depuis le serveur A et cela vous connectera au serveur B sans demander de mot de passe. Et votre script pourra tourner en autonomie :)

Par contre si vous voulez pouvoir vos connecter depuis le serveur C jusqu'au serveur B, il faudra prendre la clé publique du serveur C (/root/.ssh/id_rsa.pub) et la coller dans la fiche d'autorisations du serveur B (/root/.ssh/authorized_keys)

Vous voulez commenter ? Créez un compte !

Echec lors de la connexion à MySQL : (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known