En ocasiones es necesario acceder a un equipo al que no estamos directamente conectados, o bien acceder a un archivo ubicado en otro sistema diferente al nuestro. La forma ás sencilla de resolver este problema es mediante la conexión de los equipos a una red, de modo que la información pueda estar disponible en todos ellos, estando ubicada únicamente en uno de ellos.
Si el sistema está integrado en una red, se pueden transferir archivos entre los equipos, iniciar una sesión de forma remota y ejecutar aplicaciones o comandos en equipos remotos.
Es posible acceder de una máquina a otra siempre y cuando exista un camino físico por el que hacerlo, un cable directo, una red, etc. Las redes pueden ser de área local (LAN) o de área extensa (WAN) dependiendo de la extensión de la misma.
Para que un usuario de un sistema determinado pueda acceder a un sistema remoto será necesario que tenga una cuenta de usuario en dicho sistema, y que los accesos remotos estén permitidos.
Cuando se accede a un sistema remoto, los comandos se ejecutarán en la máquina o host remoto, si bien las entradas y salidas estándar estarán en el sistema local. Se puede decir que el sistema local se limita a interconectar al usuario con el sistema remoto, de forma transparente. Esto no es del todo cierto, pues quedan registros de las conexiones establecidas, etc. en los sistemas local y remoto.
Para acceder a un sistema habrá que conocer su dirección IP (AAA.BBB.CCC.DDD, donde cada uno de los 4 valores tomará valores entre 0 y 255) y/o nombre. Para saber si un sistema es accesible por su nombre se puede consultar el archivo /etc/hosts, en el que se identifican los nombres de los sistemas con su dirección IP. Este archivo solo puede ser modificado por el administrador o superusuario del sistema (root).
Una forma de conocer si un sistema es accesible es mediante el comando ping, mediante el cual el sistema local envía mensajes al sistema remoto y espera respuesta. Si se recibe respuesta, no se pierde ningún paquete, es que el sistema está accesible.
ping [-c cuenta] [- t tiempo] [DIR-IP o Nombre]
Para conocer información sobre un sistema se puede utilziar el comando nslookup lo cual de paso nos servirá para saber si el sistema es accesible desde el sistema en que nos encontramos.
El comando por excelencia usado para tranferir archivos entre dos sistema es ftp. Con ftp, en principio, se puede acceder a cualquier archivo del sistema al que nos conectamos, pero motivos de seguridad, lo más habitual es que el acceso esté limitado a una serie de directorios definidos por el administrador. El sistema puede admitir o no conexiones remotas de tipo anónimo.
Sintaxis :ftp [-opciones] [sistema]
Una vez conectados al sistema, deberemos validarnos, introduciendo el login de usuario y clave del sistema remoto (no del sistema local).
Una vez que hemos accedido al sistema se nos presentará un interprete de comandos o shell propia de ftp. Los comandos validos para este interprete son muy limitados (no olvidemos que está orientado a transferencia de archivos), tal y como se puede ver en la siguiente lista obtenida con el comando help:
! debug mget put size $ dir mkdir pwd status account disconnect mls quit struct append form mode quote system ascii get modtime recv sunique bell glob mput reget tenex binary hash newer rstatus trace bye help nmap rhelp type case idle nlist rename user cd image ntrans reset umask cdup lcd open restart verbose chmod ls prompt rmdir ? close macdef proxy runique cr mdelete sendport send delete mdir passive site
Es posible que existan restricciones de acceso a algunos directorios en el sistema remoto, dependiendo de la configuración que haya determinado el administrador.
Para transferir un archivo desde un sistema remoto a nuestro sistema usaremos:
ftp> get archivo_remoto [archivo_local]
El archivo_remoto puede ser el nombre de un archivo del directorio de trabajo remoto o una ruta relativa o absoluta desde dicho directorio. Si no especifica un archivo_local, el nombre del archivo de destino local será igual que el nombre del archivo de origen remoto. Si todo va bien, al final se confirmará indicando el tiempo empleado y la tasa de transferencia.
Para transferir un archivo desde nuestro sistema a un sistema remoto usaremos:
ftp> put archivo_local [archivo_remoto]
Si no especifica un archivo_remoto, el nombre del archivo de destino remoto será igual que el nombre del archivo de origen local.
Tanto en un caso como en otro, en caso de existir el archivo en el directorio de destino, será sobreescrito.
Para enviar o recibir varios archivos se pueden usar los comandos mput o mget respectivamente pudiendo usar comodines (como "*") para especificar los archivos.
Para cambiar de directorio en el sistema local y remoto utiliaremos los comandos lcd y cd respectivamente.
Para finalizar una sesión de ftp habrá que usar el comando bye.
Para copiar archivos entre sistemas se puede usar el comando rcp. Se pueden copiar archivos o directorios entre el sistema local y un sistema remoto o copiarlos entre sistemas remotos.
Si el administrador del sistema ha configurado el sistema para utilizar remsh, se podrá usar rcp sin ningún tipo de preparación adicional. Para utilizar rcp, habrá que tener:
rcp [-r] [usuario1@]nombre_host_1:archivo_origen [usuario1@]nombre_host_2:archivo_destino
La opción -r se emplea para copiar directorios de forma recursiva.
La opción de indicar el usuario es usada cuando los usuarios de los sistemas origen y destino son diferentes.
En caso de que uno de los sistemas sea el sistema local, se puede omitir el nombre del host. El archivo de un sistema remoto (tanto si es origen como destino) debera especificarse con su path. En caso de copiar del sistema local o al sistema local, el destino se indicará por su path relativo o absoluto en caso de no encontrarse en el directorio actual.
El comando sftp transfiere archivos entre máquinas de forma interactiva, utilizando una conexión segura utilizando los métodos de autenticación de ssh (ver ssh más adelante).
Sintaxis :sftp [sistema]
Los comandos interactivos son similares a los de ftp, como se puede ver en la siguiente lista obtenida con el comando help:
cd path Change remote directory to 'path' lcd path Change local directory to 'path' chgrp grp path Change group of file 'path' to 'grp' chmod mode path Change permissions of file 'path' to 'mode' chown own path Change owner of file 'path' to 'own' help Display this help text get remote-path [local-path] Download file lls [ls-options [path]] Display local directory listing ln oldpath newpath Symlink remote file lmkdir path Create local directory lpwd Print local working directory ls [path] Display remote directory listing lumask umask Set local umask to 'umask' mkdir path Create remote directory put local-path [remote-path] Upload file pwd Display remote working directory exit Quit sftp quit Quit sftp rename oldpath newpath Rename remote file rmdir path Remove remote directory rm path Delete remote file symlink oldpath newpath Symlink remote file version Show SFTP version !command Execute 'command' in local shell ! Escape to local shell ? Synonym for help
El comando scp permite copiar ficheros entre dos máquinas de una forma a como hace rcp, pero utilizando una conexión segura. Al igual que sftp utiliza los métodos de autenticación y transmisión de la información que ssh, por lo que ofrecen la misma seguridad.
Quizás el método más extendido para conexión a sistemas remotos es usando el comando telnet. Su utilización es muy sencilla, una vez accedamos al sistema trabajaremos como si estuvieramos conectados directamente o en modo local en él.
Sintaxis:telnet [-opciones] Nombre_Sistema/Dir_IP [puerto]
Si el sistema se encuentra definido en el archivo /etc/hosts se podrá usar el nombre del sistema en lugar de su dirección IP. Por defecto se utiliza el puerto el puerto 23, si bien se puede especificar otro.
Una vez que conectamos con el sistema, nos pedirá el login de usuario y su clave, del mismo modo que hariamos para entrar al sistema local. Si el usuario y clave introducidos no son correctos el sistema denegará la entrada, cortando la conexión al cabo de varios fallos (normalmente 3). Para finalizar la sesión basta con ejecutar el comando exit.
Si se dispone de cuenta en un sistema remoto, se puede utilizar el comando rlogin para iniciar una sesión en dicho sistema y trabajar en él como si estuvieramos en modo local.
Sintaxis:rlogin nombre_host_remoto/Dir_IP [-l usuario]
El sistema remoto se puede indicar por su dirección IP o por su nombre, si este se encuentra definido en el archivo /etc/hosts. Para iniciar una sesión como otro usuario en el sistema remoto, se emplea la opción -l. Por defecto, el inicio de sesión se realiza con el mismo nombre de usuario con el que se inicia una sesión en el sistema local. Esta opción es útil si utiliza el equipo de otra persona y desea volver a iniciar una sesión en su propio sistema.
Una vez que hemos accedido al sistema podremos trabajar en el sistema como si estuvieramos directamente conectados. Para finalizar una sesión abierta con rlogin hay que usar el comando exit o Ctrl-D.
Para ejecutar un comando en el sistema local mientras se utiliza el comando rlogin, habrá que usar la secuencia ~! seguida del comando que haya de ejecutarse localmente.
Para la conexión mediante rlogin se emplea el puerto 512.
Esta forma de conexión está tomando auge de un tiempo a esta parte por motivos de seguridad. SSH son las siglas se Secure Shell. Mientras que los programas clásicos transmiten los datos de forma transparente, SSH utiliza una conexión encriptada con métodos de autenticación por clave pública para establecer segura entre el cliente y el servidor. Mientras telnet utiliza por defecto el puerto 23, ssh utiliza el 22. De cara al usuario ssh funciona practicamente igual que telnet, pero más seguro en lo referente a privacidad.
Para poder establecer conexiones ssh con un equipo remoto es necesario que en dicho equipo esté corriendo el demonio sshd.
Sintaxis:ssh usuario@Sistema_Remoto [comando]
ssh -l usuario Sistema_Remoto [comando]
El comando es opcional (solo interesa para ejecutar una serie de tareas concretas en la máquina). Si no se especifica, se accederá a la shell, en cualquier caso, previa petición y validación de la clave de usuario. Existe un procedimiento que una vez ejecutado permite lanzar comandos remotos mediante ssh sin petición de clave y que se puede ver en la sección Algunas Ideas y Ejemplos.
El comando remsh permite ejecutar uno o varios comandos en un sistema remoto sin iniciar una sesión en dicho sistema. Para ello, el usuario local y sistema local deben estar definidos en el archivo .rhosts del sistema remoto.
Sintaxis:remsh sistema [ -l usuario ] comando
Para especificar varios comandos, estos han de ir separados por punto y coma ";" tal y como se hace normalmente, si bien es necesario que los comandos vayan agrupados entre comillas.
El archivo .rhosts es un archivo que se ubica en el directorio de cada usuario, en el que se definen que usuarios y desde que sistema tienen acceso a ese directorio de usuario con su identidad. Permite a esos usuarios asumir su identidad cuando acceden remotamente.
La existencia del archivo .rhosts en cualquier directorio puede ocasionar problemas de seguridad, por lo que es es importante permitir el acceso únicamente a aquellos usuarios y sistemas que deban tenerlo. Además hay que tener en cuenta los siguientes consejos:
Este archivo se consulta cuando se intenta acceder al sistema mediante rlogin, rcp o remsh
Los nombres de sistemas definidos deben coincidir con los definidos en el archivo /etc/hosts.
La estructura del archivo .rhost es del tipo:
sistema1 login_usuario_local_1 # Comentario_1 sistema2 login_usuario_local_2 # Comentario_2
Se pueden habilitar o inhabilitar usuario y/o sistemas con los signos "+" y "-", de modo que el + habilita o permite y el - deniega el acceso.
Se puede enviar y recibir correo de usuarios del sistema o de otros sistemas, para ello, existen diferente comandos como mail, mailx, o elm (en HP-UX). Para enviar un mensaje a un usuario, por lo general, habrá que indicar el nombre del usuario de destino y el nombre del sistema, con una nomenclatura como la usada en Internet:
usuario@host
Ejemplos:
$ mailx 1 root Wed Jul 13 07:52 82/2520 sistema1: Event Monitor Notif 2 root Sun Jul 24 21:08 122/3943 sistema1: Event Monitor Notif 3 root Sat Aug 13 11:01 83/2466 sistema2: Event Monitor Notif ? help mailx commands type [msglist] print messages next goto and type next message edit [msglist] edit messages from [msglist] give header lines of messages delete [msglist] delete messages undelete [msglist] restore deleted messages save [msglist] file append messages to file reply [message] reply to message, including all recipients Reply [msglist] reply to the authors of the messages preserve [msglist] preserve messages in mailbox mail user mail to specific user quit quit, preserving unread messages xit quit, preserving all messages header print page of active message headers ! shell escape cd [directory] chdir to directory or home if none given list list all commands (no explanations) top [msglist] print top 5 lines of messages z [-] display next [previous] page of 10 headers [msglist] is optional and specifies messages by number, author, subject or type. The default is the current message. ? exit $ mailx usuario1@maquinaX Subject: Probando Escribimos todo lo que queramos y finalizamos pulsando . . Cc:
Para más ayuda sobre estos comandos se recomienda mirar la ayuda en linea (comando man).