index
RECURSOS GRATUITOS, CIBERACTIVISMO
  Navegación-> Inicio | Hellguest | SSH | Cliente SSH
SSH
Introducción
El cliente de SSH
Copiando archivos con SCP
Criptografía pública
Agente SSH
Túneles SSH

Utilizando SSH

El cliente de SSH

Abrir una shell interactiva

La forma más simple de utilizar el SSH es para abrir una shell interactiva en una máquina remota, la invocación del programa no tiene ningún misterio, simplemente ponemos el comando ssh seguido de la IP o el nombre de la máquina a la que queremos conectar:

ssh [usuario@]máquina

El parámetro opcional usuario sirve para indicar la cuenta de usuario a la que se quiere conectar en el equipo remoto, de no especificarse ningún usuario se empleará el que se está usando para invocar al cliente de ssh. El parámetro máquina es la IP o el nombre del equipo informático al que queremos conectar.

A modo de ejemplo, una posible forma de realizar una conexión SSH a una máquina remota llamada remoto.ejemplo.com sería la siguiente:

[hell@local] $ ssh remoto.ejemplo.com

Continuando con el ejemplo anterior, si todo fuese bien, el cliente de SSH debería de pedirnos la contraseña del usuario hell, ya que según el prompt del ejemplo, ese es el usuario que estamos usando en el momento de invocar al cliente de SSH. En caso de poner mal la clave, el cliente nos la pediría otra vez, pero no esperes que te la pida más de tres veces, ademas este es el caso de que la cuenta de usuario hell no exista en la máquina remoto.ejemplo.com:

[hell@local] $ ssh remoto.ejemplo.com
hell@remoto.ejemplo.com's password: 
Permission denied, please try again.
hell@remoto.ejemplo.com's password: 
Permission denied, please try again.
hell@remoto.ejemplo.com's password: 
Permission denied (password).
[hell@local] $

Imaginemos que nuestra cuenta en remoto.ejemplo.com no se llama hell, sino que se llama manolo, en este caso tendríamos que invocar al cliente de ssh con un parámetro de la forma usuario@máquina, como en el siguiente ejemplo:

[hell@local] $ ssh manolo@remoto.ejemplo.com
manolo@remoto.ejemplo.com's password:
Last login: Sat Dec 17 16:30:18 2005 from local.ejemplo.com
[manolo@remoto] $

Hemos abierto una pty (pseudo-terminal) en la que se está ejecutando una shell, podemos escribir comandos y la shell los interpretará como si estuviéramos delante del equipo remoto.ejemplo.com, vale, esto es lo mismo que telnet, la única diferencia que la conexión está encriptada. Para que el cliente de SSH termine tenemos que cerrar la shell, poniendo exit, pulsado Ctrl-d o como se os ocurra.

[manolo@remoto] $ exit
Connection to remoto.ejemplo.com closed.
[hell@local] $

Ejecucar comandos remotamente

En lugar de abrir una shell interactiva, también podemos hacer que el cliente de SSH ejecute un comando y nos envie su salida, basta con poner el comando con todos sus parámetros a continuación del nombre del equipo remoto, por ejemplo para ver el contenido de la carpeta personal del usuario manolo en el equipo remoto.ejemplo.com podríamos poner lo siguiente:

[hell@local] $ ssh manolo@remoto.ejemplo.com ls
manolo@remoto.ejemplo.com's password:
a.tar.gz
doc
test.txt
misc
src
[hell@local] $

Para, por ejemplo, ver el contenido del archivo test.txt podríamos poner:

[hell@local] $ ssh manolo@remoto.ejemplo.com cat test.txt
manolo@remoto.ejemplo.com's password:
Este es un archivo de texto que
no contiene nada en especial,
tan sólo sirve para ocupar algo
de espacio en el disco duro.
[hell@local] $

Que pena, no parece que contenga ninguna información privilegiada que nos pudiese interesar, en fin, a lo nuestro. Esto en principio puede parecer estupido, ¿para qué quiero ejecutar comandos si puedo usar perfectamente una shell interactiva?, bueno, pues ahí es donde entra la imaginación de cada uno. A modo de ejemplo, fijemonos arriba en el archivo a.tar.gz, ¿qué pasaría si quisieramos extraer dicho archivo en el equipo que estamos usando?, ¿cómo podríamos hacerlo?. Tradicionalmente nos lo bajaríamos, extraeríamos su contenido y opcionalmente borraríamos el archivo comprimido. OpenSSH tiene herramientas para poder transmitir archivos por SSH, pero a pesar de ello, vamos a explotar el echo de que al ejecutar un comando de forma remota el cliente de SSH nos envia su salida, con esto y la creación de una tubería (pipe), podemos extraer el archivo directamente sin tener que bajarnoslo para luego borrarlo:

[hell@local] $ ssh manolo@remoto.ejemplo.com cat a.tar.gz | tar xvzf -
manolo@remoto.ejemplo.com's password:
a
a/a.txt
a/b.txt
a/c.txt
[hell@local] $

Analicemos el comando anterior, en primer lugar ejecutamos el comando "cat a.tar.gz" en el equipo remoto.ejemplo.com usando para ello la cuenta de usuario manolo. El programa ssh redirecciona la salida estandar del comando cat hacia la salida estandar de nuestra consola. Hasta aquí ningún problema, pues es el caso del ejemplo de antes cuando quisimos ver el contenido del archivo test.txt, pero a continuación nos encontramos con una barra vertical (|) seguida del comando "tar xvzf -". La barra vertical le dice al shell que cree una tubería entre dos comandos, esto es, redireccionar la salida estandar del comando que hay a su izquierda hacia la entrada del comando que hay a su derecha, con lo cual, en este caso, lo que conseguimos es descomprimir directamente el archivo remoto a.tar.gz en nuestra máquina local, sin tener que salvar dicho archivo previamente en nuestro disco duro.

Hemos comprobado la ventaja de que ssh redireccione la salida estandar de los comandos que ejecuta remotamente hacia la salida estandar de nuestra consola, pero la cosa no se queda ahí, ¿qué sucede con la entrada del comando ssh?, pues bien, ssh, también redirecciona su entrada hacia la entrada del comando que ejecute remotamente, ¿esto qué significa?, significa que podemos coger unos datos locales, procesarlos remotamente y obtener el resultado localmente.

Veamoslo con otro ejemplo, imaginemos que queremos invocar el comando wc en un equipo remoto para contar el número de líneas, palabras y bytes que tiene el archivo test.txt que tenemos almacenado en nuestro disco duro:

[hell@local] $ cat test.txt | ssh manolo@remoto.ejemplo.com wc
manolo@remoto.ejemplo.com's password:
       5      24     124
[hell@local] $

Hagamos otro análisis de este comando. En primer lugar está el "cat test.txt", que lo único que hace es leer el contenido del archivo test.txt y mostrarlo por la salida estandar. A continuación tenemos una barrita vertical (|) que le dice al shell que cree una tubería para redireccionar la salida del comando cat hacia la entrada del comando ssh. El comando ssh ejecuta en la máquina remoto.ejemplo.com el programa wc, al que en su entrada le pasa la salida del comando "cat test.txt", a su vez, ssh nos envia la salida de wc para que podamos verla.

Nada impide que creemos otra tubería para procesar la salida del comando wc con otra herramienta, ni tampoco que nos compliquemos la vida elaborando comandos más complejos, pues ahí entra la imaginación de cada uno.

Por HellGuest