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

22 sept 2011

Linux - Ejecutar comandos remotos con ssh


El comando ssh es un programa increíble. Se puede usar para abrir sesiones entre servidores o bien se puede usar para ejecutar comandos en un sistema remoto.

Un ejemplo sencillo sería para conocer el uso del disco duro de un servidor:

[angel@angelcm ~]$ ssh user@server ' /bin/df -h'
user@server's password: 
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_root-lv_root
                      2.0G  410M  1.5G  22% /
/dev/mapper/vg_root-lv_tmp
                      2.0G   70M  1.8G   4% /tmp
/dev/mapper/vg_root-lv_var
                      2.0G  378M  1.5G  21% /var
/dev/mapper/vg_root-lv_data01
                      6.7G  982M  5.4G  16% /data01
/dev/mapper/vg_data-lv_data02
                      247G   15G  219G   7% /data02
/dev/mapper/vg_root-lv_usr
                      3.0G  1.5G  1.3G  55% /usr
/dev/sda1             122M   13M  103M  11% /boot
tmpfs                 3.9G     0  3.9G   0% /dev/shm
[angel@angelcm ~]$ 

Esto es muy bueno, pero se vuelve más útil cuando "automatizamos" mediante el intercambio de llaves SSH, esto lo pueden aprender en otro post:

Mientras tanto, podemos ejecutar algunos otros comandos. Por ejemplo, para contar el número de procesos de apache que están corriendo en el servidor web. Todo lo que necesitamos hacer es escribir el comando entre comillas. El siguiente comando se conecta a un servidor web, luego lista todos los procesos ps -ef, después busca y cuenta las coincidencias con apache grep -c apach[e] :

[angel@angelcm ~]$ ssh user@server 'ps -ef | grep -c apach[e]'
34
[angel@angelcm ~]$

El resultado es 34 procesos de apache corriendo en el servidor.

También podemos mostrar algunas estádisticas sobre el uso de CPU del servidor:

[angel@angelcm ~]$ ssh user@server ' top -b -n 1 | head -n 8'
top - 10:15:40 up 117 days,  6:24,  2 users,  load average: 1.43, 1.52, 1.64
Tasks: 165 total,   1 running, 164 sleeping,   0 stopped,   0 zombie
Cpu(s): 10.2%us,  1.5%sy,  0.2%ni, 87.1%id,  0.1%wa,  0.3%hi,  0.7%si,  0.0%st
Mem:  16436872k total, 13376292k used,  3060580k free,   943720k buffers
Swap:  4194296k total,        0k used,  4194296k free,  5637000k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
16619 apache    15   0  350m  16m 5308 S 30.8  0.1   0:33.63 httpd              
[angel@angelcm ~]$

Para ver quien está loggeado en el servidor:

[angel@angelcm ~]$ ssh user@server 'who'
juanito   pts/0        2011-09-20 16:50 (10.177.65.41)
pepito    pts/1        2011-09-21 10:13 (10.177.65.209)
[angel@angelcm ~]$

Nuevamente, les recomiendo la lectura de los posts:

Listo, nos vemos en la siguiente entrada.

21 sept 2011

Linux - Sorry, you must have a tty to run sudo

Estaba intentando actualizar unos paquetes de forma remota con ssh, para lo que usé el siguiente comando:

[root@server ~]# ssh user@192.168.1.100 "sudo yum update httpd"

Pero recibí un mensaje de error:

Sorry, you must have a tty to run sudo

Solución.

Esto funciona en Fedora, RHEL y CEntOS.

[root@server ~]# ssh -t user@192.168.1.100 "sudo yum update httpd"

El switch '-t' nos permitirá interactuar mediante una TTY (terminal) tal como si estuvieramos de forma local en el servidor.

Listo, nos vemos en la siguiente entrada.

13 sept 2011

Linux - Login SSH sin password

En mi estancia en GEE he encontrado que los desarrolladores crean scripts para distribuir archivos a los mirrors, haciendo una especie de mirroring "charro", pero con la magia de no requerir la intervención de un admin y, además, automático.

Supongamos que deseamos usar Linux y OpenSSH para automatizar algunas tareas (cómo la mencionada arriba). Por lo tanto, necesitamos hacer login desde un host "A" con Usuario "a" hacia el host "B" con Usuario "b", y cómo estamos usando ssh desde un script no deseamos introducir el password.

Manos a la obra:

Primero debemos hacer log in en "A" y generar las llaves de autenticación. No introducir passphrase:

a@A:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/angel/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/angel/.ssh/id_rsa.
Your public key has been saved in /home/angel/.ssh/id_rsa.pub.
The key fingerprint is:
dd:1a:a1:bf:28:02:2d:d1:ac:c8:94:7d:cd:7f:a7:28 a@A
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|  oo  o   .      |
| o..o. o o o     |
|o. +.   S o .    |
|..+ .    o + .   |
|   o      = o    |
|    . .E o o     |
|     . .o .      |
+-----------------+


Ahora usaremos ssh para crear el directorio ~/.ssh como el usuario "b" en "B" (el directorio ya puede existir):

a@A:~$ ssh b@B mkdir -p .ssh
b@B's password:


Finalmente agregamos la llave pública generada en "A" a b@B:.ssh/authorized_keys e introducir el password de "b" una vez más:

a@A:~$ cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys'
b@B's password: 
a@A:~$


A partir de este momento podremos hacer log in en "B" como "b" desde "A" sin password.

a@A:~$ ssh b@B
Last login: Thu May 19 12:23:06 2011 from 192.168.1.33
[b@B ~]$


También funciona para hacer scp (Secure Copy)

a@A:~$ touch test
a@A:~$ scp test b@B:.
test                                          100%    0     0.0KB/s   00:00    
a@A:~$


Genial!! Nos vemos en la siguiente entrada!!!