:-) He aqui una de mis cosas favoritas del OpenSSH, o simplemente SSH :P (Secure SHell).
Bueno capas que muchos tiene un consepto.. no errado pero si muy pobre de los que es el ssh, muchos creen que solo es una especie de entrada a usar una PC remota por una consola :-P, y que si o si siempre tiene ejecutar un bash apenas nos conectamos xD
Pero sabiendo el verdadero significado de shell: (concha, xD), una shell es una capa entre el sistema operativo y
algo, eso puede ser un humano o un programa.
Si bien ssh trabaja con los usuarios del sistema, no es solo para editar un virtual en un server en produccion, puede ser util para muchas cosas, y la ventaja de este que es seguro (SECURE shell), usando juegos de llaves DSA y RSA para certificar y encriptar los datos.
Se pueden hacer tuneles TCP/IP, esto es, crear un tunel desde una PC con un cliente ssh (ssh, putty, etc) y un equipo con sshd (ssh-server), este tunel es manejado por esta SHELL (capa o interfaz/interface), pero para la conexion esto es transparente... osea..
[MAQUINA LOCAL puerto 300:-ssh]-------------------------------------------->[sshd-> puerto 300 MAQUINA REMOTA]le decimos que el ssh habra un puerto local (300) y haga un puente con el 300 de la maquina remota, esta se conectara al sshd remoto (puerto 22) y le dira al sshd que se conecte al puerto 300. Alla hay un cliente local conectandose al puerto 300, y aca hay un servicio abriendo un puerto local, para la aplicacion que trabaja con esto es totalmente transparente, pero para la comunicacion no, hay una encriptacion de los datos en vivo.
Supongamos que un programa le manda un HOLA a otro:
[PC 1 HOLA ] -----------> HOLA -----------> [PC 2]la informacion viaja en plano y la comunicacion puede ser sniffeada o spoffeada falsificando conexiones, paquetes y etc... Ahora el puente
[PC1 HOLA --> () SSH ) ---------~jEoi8SaiO-------> [() SSHD ) -> HOLA PC 2] La clave DSA sertifica por medio de una firma digital que ese HOLA vino de PC 1, y aparte encripta los datos para que otra PC no pueda ver que se envia, a [PC 3] por ejemplo ~jEoi8SaiO no le va a servir de nada si no tiene la llave privada para desencriptarlo (RSA).
Ahora al asunto practico, abrimos un puerto ssh y lo redirigimos... (con ssh)
ssh -N -L 300:127.0.0.1:300 server.comaca creariamos abririamos un puerto local (300) el cual ssh tunealearia* al sshd de
server.com y este a la vez al puerto 300 local.
Pero supongamos que tenemos un server WEB y un server Mysql, solo el web tiene salida a internet,asi que seria algo asi:
[PC] ----------------------------------> [WS] --------------->[MYSQLD] 190.54.233.176 server.com 192.168.1.2 no nos podemos conectar al server de mysql directo, pero el servidor web si, asi que se lo pedimos:
ssh -N -L 5000:192.168.1.2:3306 server.comeso lo que le dice al sshd (
server.com) es que nos concete al 3306 (mysql) de
192.168.1.2 (la ip interna del server mysql), de esa forma no solo nos sirve para asegurara la cominicacion, sino que tambien sirve paraconectarnos a maquinas que esten en el la red interna y no con acceso directo a nosotros, saltandonos firewalls, y demas.
Con el cliente de MySql no conecteriamos
mysql -u usuario -h localhost -P 5000 -p
Y es como conectarnos de alla (usuario@localhost).
Obviamente si deseamos que nuestros usuarios creen tuneles hay opciones, en /etc/ssh/sshd_config (en linux, en otros SO unix no sé)
AllowTcpForwarding yes#X11Forwarding no Con eso se puede desabilitar/habilitar el fordwardeo de puertos y el de interface gráfica (X11).
Hilo de discucion en GeeX:
http://groups.google.com/group/unigeex/browse_thread/thread/cfe8b71f0483b1a4