Category Archives: Scripts

redhat-ansible-footer

Ansible: Cómo hacer que ansible pida la contraseña para ejecutar comandos a un cluster

Nos puede interesar que para ejecutar acciones contra un grupo de máquinas (cluster) siempre nos pida la contraseña :

  • no instalamos las claves para la conexión ssh sin contraseña en ese grupo de máquinas
  • el servidor que aloja ansible deberá tener instalado sshpass
  • el grupo de máquinas debe conocer con antelación el id del servidor de ansible realizando una conexión ssh previa

Un ejemplo del comando, pidiendo la contraseña :

ansible-playbook -k -i servidores test.yml --tags='prueba'
redhat-ansible-footer

Ansible: Cómo enviar en ansible la salida de un comando por email

A veces la salida de un comando contiene información que interesa que alguien reciba por email.

En Ansible podemos guardar la salida de un comando con ‘register’

# roles/test/tasks/main.yml
- name: git pull
 command: 'git pull {{ branch }}'
 args:
 chdir: /var/www/webpage.tld/
 register: output2email
 tags: 
 - live
 - stage
- local_action: mail
 from='root@servidor-ansible.tld'
 to='supervisor@eljefe.tld'
 subject='Deploy git en {{ ansible_hostname }}'
 body='{{ output2email.stdout }}'

La documentación de ansible nos recuerda que el módulo ‘mail’ está en el módulo ‘Extras’ y que aunque en este momento (20160119) se instalen junto con el core de la aplicación, puede separarse en un futuro.

newrsynclogo

Ejemplos rsync

Unos sencillos ejemplos de la herramienta rsync.

Trayendo los datos desde otro server al server donde se ejecuta el rsync:

Opción adicional: Rsync excluyendo directorio

rsync -avz --exclude 'tmp' server1.okitup.com:/home/serv1okitup/ /home/serv2okitup/

Enviando los datos desde el servidor donde se ejecuta rsync a otro server destino:

Opción adicional: Con distinto puerto ssh

rsync -avu --rsh='ssh -p41555' /home/serv1okitup/ root@server2.okitup.com:/home/serv2okitup/
original

Owncloud – Descifrar ficheros manualmente

Con el siguiente script se puede descrifrar el contenido de un fichero cifrado de owncloud.

El script php quedaría así:

<?php
 require_once 'crypt.php';

// first get users private key and decrypt it
 $encryptedUserKey = file_get_contents("/var/www/clients/client1/web1/web/data/user1/files_encryption/test.txt.private.key");
 $decryptedUserKey = OCA\Encryption\Crypt::decryptPrivateKey($encryptedUserKey, "admin");

// now we need to decrypt the file-key, therefore we use our private key and the share key
 $shareKey = file_get_contents("/var/www/clients/client1/web1/web/data/user1/files_encryption/share-keys/documents/test.txt.user1.shareKey");
 $encryptedKeyfile = file_get_contents("/var/www/clients/client1/web1/web/data/user1/files_encryption/keyfiles/documents/test.txt.key");
 $decryptedKeyfile = OCA\Encryption\Crypt::multiKeyDecrypt($encryptedKeyfile, $shareKey, $decryptedUserKey);

// finally we can use the decrypted file-key to decrypt the file
 $encryptedContent = file_get_contents("/var/www/clients/client1/web1/web/data/user1/files/documents/test.txt");
 $decryptedContent = OCA\Encryption\Crypt::symmetricDecryptFileContent($encryptedContent, $decryptedKeyfile);

//echo "result: " . $decryptedContent . "\n";
 echo $decryptedContent;
 ?>

Observaciones:

  • Hay un require de crypt.php, se tiene que tener en cuenta ehhh 😉
  • Se tiene que disponer de la private.key, del shareKey y del keyfile para poder realizar el descifrado.

Hasta pronto,

???????????????????????????????????????????????????????????????????????????????????????????

Scripting : xargs – paths con espacios – wildcard

Cuando queremos ejecutar comandos shell – sobretodo ‘find’ – enlazados via pipe que incluyen paths, directorios o carpetas con espacios nos encontramos con problemas cuando recogemos una salida y queremos aplicarle un comando xargs.

La solución es decirle a find que acabe sus resultados con el caracter null y avisar a xargs que le van a llegar entradas con el caracter null :

find /path/con espacios/ -type f -print0 | xargs -0 -I % ls %

Si el comando que alimenta xargs no puede añadir el carater null podemos ‘encapsular’ el resultado entre comillas con un sed :

ls /path/con espacios/ | sed 's/.*/"&"/' | xargs -I % echo %

Finalmente, si queremos usar una wildcard en un comando ejecutado por xargs tenemos que ‘encapsularlo’ en un nuevo shell :

find /path/con espacios/ -type f -print0 | xargs -0 -I % sh -c 'ls "%"*sufijoespecialqueestamosbuscando'