Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

#1 Le 09/01/2017, à 15:45

elladan35

[Résolu]Bash générer variables en découpant une chaine de caractère

Bonjour !

En bash, j'essaye d'automatiser l'intégration d'une clé publique SSH sur mes équipements réseaux.

Ainsi, j'ai commencé par récupérer le nombre de caractères composant la clé SSH (qui est, ici, de 752) avec les commandes suivantes :

catidrsapub=`cat id_rsa.pub`
lengthrsapub=$(echo -e $catidrsapub | wc -c)
echo "$lengthrsapub"

Maintenant que j'ai le nombre de caractères, je commence une division arrondie à l'entier supérieur. En effet, le problème d'un équipement Cisco, est qu'il n'est pas possible d'écrire dans la CLI plus de 254 caractères à la fois ! Il faut donc décomposer les 752 caractères en plusieurs blocs pour tout rentrer après.

Ainsi, j'ai décidé que mes blocs feront au maximum 250 caractères chacun. Les commandes ci-dessous me permettent de connaître le nombre de blocs qu'il me faudra pour poursuivre :

lengthrsapub=$((($lengthrsapub/250)+($lengthrsapub%250>0)))
echo "$lengthrsapub"

Ainsi, 752 / 250 arrondi à l'entier supérieur me donne 4, soit 4 blocs pour tout rentrer.

Mais maintenant, j'ai un problème ! sad
En effet, je ne vois pas trop comment je peux faire pour faire le découpage !
Il faudrait que mon script, en voyant qu'il faut 4 blocs pour tout rentrer, définisse 4 variables. la première variable récupère les 250 premiers caractères, la seconde les 250 suivantes et ainsi de suite jusqu'à ce qu'on ait créé 4 variables. (avec au final, la 4eme variable n'ayant que 2 caractères).

Je m'en remets donc à vous en ésperant avoir une réponse à ma problématique ! smile

Dernière modification par elladan35 (Le 11/01/2017, à 11:12)

Hors ligne

#2 Le 09/01/2017, à 16:20

Arbiel

Re : [Résolu]Bash générer variables en découpant une chaine de caractère

Bonjour

Peut-être une variable de type tableau, et un découpage avec dd ?

Arbiel


Arbiel Perlacremaz
Dell Vostro 3550 Ubuntu 14.04 64 bits (je ne suis pas passé à la 16,04 à cause d'un problème majeur avec crypttab, et de sa déconcertante lenteur)

Hors ligne

#3 Le 09/01/2017, à 17:02

pingouinux

Re : [Résolu]Bash générer variables en découpant une chaine de caractère

Bonjour,

v1=$(dd if=id_rsa.pub bs=250 count=1 skip=0)
v2=$(dd if=id_rsa.pub bs=250 count=1 skip=1)
v3=$(dd if=id_rsa.pub bs=250 count=1 skip=2)
v4=$(dd if=id_rsa.pub bs=250 count=1 skip=3)

Mais pourquoi ne pas prendre des blocs de 251 pour en avoir un de moins ?

Hors ligne

#4 Le 09/01/2017, à 17:18

MrRaph_

Re : [Résolu]Bash générer variables en découpant une chaine de caractère

pingouinux a écrit :

Mais pourquoi ne pas prendre des blocs de 251 pour en avoir un de moins ?

Je crois que la contrainte des 250 est fixée par le matériel Cisco ! ;-)


Heureux possesseur de deux Ubuntu 15.04 (serveur).
Je blog mes aventures techniques sur ce système et d'autres sur mon blog
https://techan.fr/

Hors ligne

#5 Le 09/01/2017, à 17:24

pingouinux

Re : [Résolu]Bash générer variables en découpant une chaine de caractère

MrRaph_ a écrit :

Je crois que la contrainte des 250 est fixée par le matériel Cisco ! ;-)

elladan35 a écrit :

En effet, le problème d'un équipement Cisco, est qu'il n'est pas possible d'écrire dans la CLI plus de 254 caractères à la fois !

Il semble qu'on puisse s'en tirer avec 3 blocs.

Hors ligne

#6 Le 09/01/2017, à 21:34

elladan35

Re : [Résolu]Bash générer variables en découpant une chaine de caractère

Bonjour et merci de vos réponses !

Oui dans mon script j'ai voulu faire des blocs de 250 mais bien sûr il est possible de monter jusqu'à des blocs de 254 (ce qui serait plus logique ici sachant qu'on peut tout rentré à partir de blocs de 251). smile

Merci beaucoup pingouinux ! Je m'empresserais demain de tester cela et ainsi poursuivre mon script smile

Dés que j'aurais formé cela sous la forme d'une fonction je vous enverrais ma façon de faire si cela vous intéresse !

Encore merci ! smile

Hors ligne

#7 Le 09/01/2017, à 22:13

alex2423

Re : [Résolu]Bash générer variables en découpant une chaine de caractère

Excellent pingouinux la commande dd, pour ma part, j'aurais utilisé la commande cut, mais je serais pris la tête.

Cependant après renseignement de la commande dd, il semblerait que le paramètre BST correspond à des octets et non pas des caractères.
https://fr.wikipedia.org/wiki/Dd_(Unix)

En ligne

#8 Le 10/01/2017, à 07:09

pingouinux

Re : [Résolu]Bash générer variables en découpant une chaine de caractère

alex2423 #7 a écrit :

il semblerait que le paramètre BST correspond à des octets et non pas des caractères

C'est le paramètre bs, mais tu as raison.

Hors ligne

#9 Le 10/01/2017, à 08:07

Watael

Re : [Résolu]Bash générer variables en découpant une chaine de caractère

salut,

$ rsaString=$(tr -dc [[:alnum:]_] < /dev/urandom | head -c 752) # génére une chaîne aléatoire de 752 caractères.
$ for ((i=0;i<${#rsaString};i+=250)); do printf 'envoi vers CISCO :\n%s\n\n' ${rsaString:i:250}; done
envoi vers CISCO :
DyJhLjU0CFM2p07HbkFZyYnQNjqNgMCkj1[LFIEpq_iBb4oSiuRwT[V7kq6rOihtvLJS9eHxfEMigjLWjmw0GGZ]SfkT2X[pwa1TFSon6]V7H7FulICfu1I]J5RK6SvFrXKdmTxRJE7fENYVJstVCjfqadpNNhXjxmw58[uhV89afUQ5Xo1Sz[pbyE5hOTUVvh7j2DUSCZDwlevFqFULe[gWtzjkY8oM]ksEE0cCCes85AyNZUQuqzdJCR

envoi vers CISCO :
ylgmQ[BXD4yYShrZ4i1SwVmpeRiW]rm1begMVzYpV4J]QYwvaGFFdr_iaNIv_qP[FsOc7[J]ttZrUXc1zt_u8hv_[k0xhGrxKTSNZCF5VU4K]26UaHO6ra5J9gHuxN_cF_ab_JDkhBfRoawpaiWoa1NyHrBpZP5wK[FIVpBSKdZlIqzy5X6l6dsIsHI]QWwmSzuZVeWIyDs]BLrzCuYatuml4_zXWMSUEHTSCzZ]aY6fTsHQKkp]nYlH99

envoi vers CISCO :
dsMQvWLx[QcwTBPJ5NDM7G2pF7LHCjME9NH1xDT3_xU2bfj2RVra[vPS96NU_F6xp58OFQrkbxmxOBbsgeHYBWjiko0gnDrmFM0ZqvtKloZZXh5J4PCrNJUhPB]SrZqD4P6Gx84B0NOj[x7eC9JK4JtOQN3Je4X4RsuAbhIfgZCtv_sKNWoIcO]4lsv_RYOn]1NqmDOfVG]uorI516VXIx6xCTBph92DtVksC_wMmwW22bl0uQMlPZfqc1

envoi vers CISCO :
VZ

Dernière modification par Watael (Le 10/01/2017, à 08:08)


eval, c'est mal.

Hors ligne