sábado, 25 de agosto de 2012

SSH cliente y servidor: Introducción


El cliente de SSH es una aplicación que permite hacer logging en un ordenador remoto y también ejecutar comandos remotamente.

También es posible ejecutar aplicaciones gráficas, y redirigir puertos TCP entre las máquinas local y remota, en ambos sentidos.

SSH establece una comunicación segura cifrada entre la máquina local y remota a través de una red insegura.

El cliente SSH para funcionar necesita conectarse al servidor SSH situado en la máquina remota.


Instalar ssh y sshd


Los programas binarios de SSH son:

sshCliente SSH de OpenSSH (programa de login remoto)
sshdDemonio SSH de OpenSSH


En Debian o Ubuntu:

$ sudo aptitude install openssh-client # instala el cliente ssh.

$ sudo aptitude install openssh-server # instala el demonio sshd.


Configurar el cliente SSH


El fichero de configuración general del cliente OpenSSH: /etc/ssh/ssh_config

(NOTA: el fichero de configuración de usuario ~/.ssh/config tiene precedencia sobre el fichero de configuración general)

Edita el fichero de configuración siguiendo las instruciones de su página de manual:
$ man ssh_config


Configurar el servidor SSH


El fichero de configuración del servidor OpenSSH: /etc/ssh/sshd_config

La página de manual muestra información acerca de las opciones en este fichero:
$ man sshd_config


Algunas opciones interesantes que podemos editar en el fichero de configuración del servidor:

Port 22 # Seleciona el puerto en el que escucha el demonio de SSH.
PermitRootLogin yes # Habilita el poderse loguear como root.
X11Forwarding yes # Habilita la redirección de las X11.
X11DisplayOffset 10 # Configura el display que usará el servidor X11 de 10 en adelante.

Después de editar el fichero de configuración del servidor es necesario reiniciar el demonio sshd.
$ sudo service ssh restart


Login remoto


Para loguearse en un ordenador remoto:

$ ssh -l username -p puerto maquina_remota

ó

$ ssh username@maquina_remota -p puerto

Si no le pasamos ningún número de puerto, usa por defecto el 22.
Si no le pasamos nombre de usuario, emplea por defecto el mismo que en la máquina local.


Ejecutar un comando en el sistema remoto


$ ssh user@hostname "comando_a_ejecutar"

P.ej: $ ssh user@hostname "ls -l" # lista el directorio home del usuario remoto.


Utilizando la entrada estandar, la salida estandar, y tuberías podemos intercambiar ficheros entre los sistemas local y remoto.

Este comando copia el fichero foo desde el home del usuario en la máquina remota hasta el directorio local en la máquina local:
$ ssh user@hostname "cat foo" | cat - > foo

O a la inversa, para copiar el fichero desde el directorio local a la máquina remota:
$ cat foo | ssh user@hostname "cat - > foo"


Exportar las X windows


Cuando invocamos el cliente ssh, si queremos ejecutar aplicaciones gráficas, necesitamos proporcionar algunas opciones al cliente ssh, en la línea de comandos.

NOTA: El servidor necesita tener activada la redirección de las X11, para que ésto funcione, en el fichero de configuración.

$ ssh -XC user@hostname

-X habilita la redirección de las X11
-C habilita la compresión


Podemos entonces ver localmente aplicaciones gráficas X ejecutadas en la máquina remota. Normalmente se asocian al display del :10 en adelante.
$ ssh -XC user@hostname
$ xeyes
$ env | grep -i display
DISPLAY=localhost:10.0

o simplemtente:
$ ssh -XC user@hostname xeyes


Redirigir puertos entre los sistemas local y remoto


Redirigir un puerto local al sistema remoto:

-L local_port:hostname:port # redirige el puerto local "local_port" al servidor remoto y puerto "hostname:port".


P.ej: Supongamos que está habilitado telnet en el puerto 25 en la máquina remota.
$ ssh -L 2025:localhost:25 # Redirige el puerto local 2025 al puerto 25 en la máquina remota.
En el ordenador local podemos ejecutar:
$ telnet -l user localhost:2025 # y estaríamos haciendo login en la máquina remota.


P.ej: de la página de manual de x11vnc:
$ ssh -t -L 5900:localhost:5900 far-host 'x11vnc -localhost -display :0'
localhost indica aquí la máquina remota, donde le servidor ssh está instalado.


P.ej:
$ ssh -l username remote_IP -L 8025:localhost:25 -L 8143:localhost:143


Redirigir puertos del sistema remoto a alguna máquina en la parte local de la red:

-R port:host:hostport # redirige el puerto "port" de la máquina remota a "host:hostport"

P.ej:$ ssh -l user remote_IP -R 2222:local_IP:5900
Entonces en el sistema remoto, si nos conectamos al puerto 2222 en realidad estamos conectaándonos al puerto 5900 en la máquina local.
remote_box$ vncviewer localhost:2222


REFERENCIA


$ man ssh
$ man sshd
$ man ssh_config
$ man sshd_config


TRADUCIDO DE


SSH client and daemon: Introduction

No hay comentarios:

Publicar un comentario