Mostrando entradas con la etiqueta SSHd. Mostrar todas las entradas
Mostrando entradas con la etiqueta SSHd. Mostrar todas las entradas

miércoles, 2 de enero de 2019

Conectar con SSH sin clave pública/privada - SSHpass


Qué es SSHpass:

     Cuando utilizamos SSH para conectarnos de un servidor a otro utilizamos un usuario y una contraseña.
   
     Usualmente podemos generar un par de claves pública y privada para que no nos solicite la contraseña. En el caso que no deseemos utilizar estas claves podremos utilizar el SSHPASS que nos servirá para pasar la contraseña por parámetro.

     Esta herramienta podemos utilizarla por ejemplo para poner dentro de scripts sin que tener que configurar las keys SSH.

     También explicaré como utilizar GPG para encriptar la clave y que no quede en texto plano en un archivo.

Instalar el sshpass:
root@debian:~# apt-get install sshpass

Ingresar pasando el password sin tener keys ssh:
root@debian:~# sshpass -p 'Mi_password' ssh 192.168.0.200

Poner la clave dentro de un archivo:
root@debian:~# echo 'Mi_password' > pass.txt
root@debian:~# sshpass -f pass.txt ssh 192.168.0.200

Tener en cuenta para darle permisos de lectura solo al owner, para que nadie más pueda leer la clave.
root@debian:~# chmod 0400 pass.txt

Encriptar el archivo de contraseña con gpg:
root@debian:~# gpg -c pass.txt

Ingresamos una passphrase que nos solicita y la confirmamos. Esto nos genera un archivo .gpg

root@debian:~# ls -lat pass.txt.gpg
-rw-r--r-- 1 root root 94 ene  2 11:15 pass.txt.gpg

Eliminamos el que no está encriptado:

root@debian:~# rm -rf pass.txt

Usamos el sshpass con la clave encriptada:
root@debian:~# gpg -d -q pass.txt.gpg > pass.txt; sshpass -f pass.txt ssh 192.168.0.200; rm pass.txt

viernes, 28 de diciembre de 2018

Parallel SSH - Ejecutar comandos remotos en multiples servidores

Todos sabemos que es SSH y que podemos hacer con él, pero hoy vamos a ver Parallel SSH.

Que es Parallel SSH:

Es un comando ó herramienta que nos permite conectarnos a varios servidores simultáneamente mediante SSH y poder ejecutar comandos sin ingresar uno por uno para ejecutarlos.

Instalamos el parallel-ssh:
root@debian:~# apt-get install pssh

Vemos como usarlo: 
root@debian:~# parallel-ssh --help
Usage: parallel-ssh [OPTIONS] command [...]
Options:
  --version             show program's version number and exit
  --help                show this help message and exit
  -h HOST_FILE, --hosts=HOST_FILE
                        hosts file (each line "[user@]host[:port]")
  -H HOST_STRING, --host=HOST_STRING
                        additional host entries ("[user@]host[:port]")
  -l USER, --user=USER  username (OPTIONAL)
  -p PAR, --par=PAR     max number of parallel threads (OPTIONAL)
  -o OUTDIR, --outdir=OUTDIR
                        output directory for stdout files (OPTIONAL)
  -e ERRDIR, --errdir=ERRDIR
                        output directory for stderr files (OPTIONAL)
  -t TIMEOUT, --timeout=TIMEOUT
                        timeout (secs) (0 = no timeout) per host (OPTIONAL)
  -O OPTION, --option=OPTION
                        SSH option (OPTIONAL)
  -v, --verbose         turn on warning and diagnostic messages (OPTIONAL)
  -A, --askpass         Ask for a password (OPTIONAL)
  -x ARGS, --extra-args=ARGS
                        Extra command-line arguments, with processing for
                        spaces, quotes, and backslashes
  -X ARG, --extra-arg=ARG
                        Extra command-line argument
  -i, --inline          inline aggregated output and error for each server
  --inline-stdout       inline standard output for each server
  -I, --send-input      read from standard input and send as input to ssh
  -P, --print           print output as we get it
Example: pssh -h hosts.txt -l irb2 -o /tmp/foo uptime


Editamos el archivo donde pondremos ip's de los servidores donde ejecutaremos los comandos:
root@debian:~# vi hosts.txt
192.168.0.100
192.168.0.200

Ejecutamos el comando en ambos servidores:
root@debian:~# parallel-ssh -h hosts.txt -l root -o /tmp/salida uptime
[1] 09:52:12 [SUCCESS] 192.168.0.100
[2] 09:52:12 [SUCCESS] 192.168.0.200 

-h listado de servidores donde ejecutaremos los comandos
-l usuario con el que se conectará por ssh. Tener en cuenta que debe tener configuradas las keys ssh para que no pida password.
-o directorio de salida donde mostrará la salida de cada comando
uptime el comando que ejecutará en cada servidor remoto


Vemos la salida de cada ip en la ruta que le pasamos con el -o: 
root@debian:~# ls -lat /tmp/salida.txt/
total 1930
drwxrwxrwt 7 root root 1971200 Dec 28 09:55 ..
-rw-r--r-- 1 root root      74 Dec 28 09:52 192.168.0.100
-rw-r--r-- 1 root root      73 Dec 28 09:52 192.168.0.200
drwxr-xr-x 2 root root    1024 Dec 28 09:51 .

Vemos el resultado de cada server:
root@debian:~# cat /tmp/salida.txt/192.168.0.100
  9:52am  up 100 day(s), 16:24,  9 users,  load average: 0.06, 0.07, 0.06 
root@debian:~# cat /tmp/salida.txt/192.168.0.200
  9:52am  up 85 day(s), 17:12,  0 users,  load average: 0.11, 0.18, 0.19

En caso que no tengamos las keys ssh podremos ingresar el password:

root@debian:~# parallel-ssh -h hosts.txt -A -O PreferredAuthentications=password uptime
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: acáVaLaClaveDeRoot
[1] 12:08:27 [SUCCESS] 192.168.0.100
[2] 12:08:27 [SUCCESS] 192.168.0.200



sábado, 22 de abril de 2017

Conectarme a Android por SSH sin rootearlo con Termux

Desde el "Play Store" del celu descargaremos la aplicación llamada Termux.

Y ya tenemos un terminal de bash, probamos ejecutar sshd y vemos que no está instalado:

$ sshd


Lo instalamos con el bien y ponderado apt-get de debian dandole Y para continuar cuanod nos pida:

$ apt-get install openssh

 

Ejecutamos un netstat para ver en si esta escuchando en el puerto 22, vemos que no aparece, lo iniciamos y volvemos a verificar, pero ahora vemos que está en otro puerto, el 8822:

$ netstat -an | grep -i listen | grep 22
$ sshd
$ !net 


Intentamos conectarnos al puerto 8022 desde la misma aplicacion y vemos que no aparece permiso denegado:

$ ssh localhost -p 8022


Tenemos que crear el authorized_keys y darle permisos:

$ touch .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys
$ chmod 700 .ssh/ 


Generamos el juego de llaves publica y privada, damos enter salvo que querramos especificar una passphrase, en mi caso la dejé vacía para ingresar sin password:

$ ssh-keygen


Agregamos la publica al final del authorized_keys:

$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys


Ahora si vemos que nos podemos loguear al localhost a dicho puerto:

$ ssh localhost -p 8022


Copiamos la clave privada desde el telefono hacia el servidor desde el cual nos conectaremos, el server tiene la ip 192.168.1.43:

$ scp .ssh/id_rsa root@192.168.1.43:/root


Probamos conectarnos desde el linux por ssh indicando la ip del telèfono, el puerto y la clave privada que copiamos:

root@linux:/# ssh 192.168.1.36 -p 8022 -i id_rsa


Si queremos conectarnos sin contraseña con el putty primero nos descargamos el puttygen.exe de acá http://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html, lo ejecutamos, primero seleccionamos RSA, damos Load para cargar el id_rsa que generamos en el android, damos Aceptar y lo guardamos como clave privada con Save private key:


Ejecutamos el putty, vamos a Conexión - Data y en username ponemos el usuario que tiene el android, pueden verlo desde el terminal con el comando:

$ whoami
u0_a145


Luego vamos a SSH -> Auth -> Browse .. y seleccionamos la clave .ppk que generamos previamente con el puttygen:


Finalmente en la solapa Session ponemos la ip, el puerto, seleccionamos SSH, ponemos el nombre de la sesiòn en Saved Session y click en Save:


Open y listo, conectamos.