Práctica 9 ################################ Herramientas de Internet desde consola Informática Básica Grado en: Ingeniería Informática, Matemática Computacional Material de apoyo E N estos apuntes se explica el funcionamiento de una serie de herramientas que permiten conectarse remotamente a otro ordenador para ejecutar órdenes en él y transferir ficheros entre dos ordenadores. Si aprendes a manejar estas herramientas, podrás conectarte desde tu casa a lynx.uji.es, el ordenador en el cual tienes tu cuenta de trabajo en la Universidad, y ejecutar órdenes de forma remota en dicho sistema. También aprenderás a transferir ficheros desde lynx.uji.es hasta tu casa y viceversa. Recuerda que lynx es el servidor que se usa para efectuar conexiones interactivas (SSH, SCP, FTP,. . . ). Índice 1. Conexión remota 1.1. El cliente telnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. El cliente ssh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 2 2. Transferencia de ficheros 2.1. El cliente ftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. El cliente scp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3. wget: una herramienta para gestionar descargas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 4 5 6 Bibliografía Documentación sobre wget (en inglés): <http://www.gnu.org/software/wget/manual/wget.html> -1- EI(MT)1002. Informática Básica - 1er curso. 1. Material de apoyo. Herramientas de Internet desde consola Conexión remota Si un ordenador puede ser utilizado por varios usuarios simultáneamente (normalmente se le denomina servidor), es necesario que cada uno de estos usuarios disponga de un terminal propio desde el que acceder al mismo1 . Es decir, cada uno de los usuarios necesita como mínimo un teclado (y/o ratón) y una pantalla que le permita introducir las órdenes y visualizar la salida de las mismas. El servidor es un ordenador remoto (situado a decenas de metros o miles de kilómetros), mientras que el ordenador desde el cual me conecto es el ordenador local. Una vez se ha establecido una conexión entre el ordenador local y el ordenador remoto, el usuario puede ejecutar órdenes en aquél viendo el resultado de la ejecución de éstas en la pantalla del ordenador local. En nuestro caso, nos conectaremos habitualmente a ordenadores remotos con S.O. de la familia UNIX, por lo que las órdenes que podremos ejecutar son las mismas que se han visto para el intérprete de órdenes de Linux: ls, cd, mkdir, less, cp, rm, mv, chmod, etc. ¿Es posible ejecutar remotamente aplicaciones “gráficas”, es decir, que abren ventanas en su funcionamiento? La respuesta es sí, pero antes es necesario configurar ciertas cosas que no comentaremos por estar fuera del alcance de los objetivos de la asignatura. No obstante, debes saber que, en la mayoría de los casos, el administrador de un sistema puede haber preparado algunas de estas “cosas” y que si empleas la opción -X en una conexión con ssh, podrás ejecutar aplicaciones gráficas remotamente (viendo los gráficos en la pantalla local). Otra posibilidad para ejecutar remotamente programas gráficos es usar un programa cliente (visualizador) que acceda a un servidor VNC (Virtual Network Computing): además esta solución es completamente independiente de los Sistemas Operativos y arquitecturas de las máquinas cliente y servidor. Existen diversas aplicaciones que permiten realizar esta función de conexión remota desde consola. En nuestra asignatura estudiaremos dos de ellas: telnet y ssh. A estas aplicaciones se les denomina clientes ya que permiten acceder, respectivamente, a dos servicios distintos de conexión remota. 1.1. El cliente telnet La aplicación telnet (terminal emulation) se puede ejecutar en un ordenador cualquiera y permite acceder de forma remota a otro ordenador. Al iniciar la conexión con el ordenador remoto, éste pedirá al usuario que se identifique introduciendo su nombre de usuario (login) y contraseña (password). Cuando ejecutemos telnet, deberemos indicarle cuál es el nombre de la máquina (o su dirección IP) con la que deseamos establecer la conexión. Por ejemplo, para conectarse a lynx.uji.es, teclearíamos lo siguiente (en un terminal): telnet lynx.uji.es Una vez hecho esto, en la parte inferior de la ventana del terminal se muestran dos líneas en las que se informa sobre el Sistema Operativo instalado en la máquina remota y, posiblemente2 , algunos datos adicionales sobre el sistema. A continuación, en la línea (o líneas) siguientes pueden mostrarse diversos mensajes (según lo haya configurado el administrador). Finalmente, la máquina remota pide al usuario que introduzca su nombre en el sistema (login:). Una vez introducido el nombre del usuario, se solicita la contraseña. Los caracteres tecleados en la contraseña no se visualizan de ningún modo, ni siquiera como asteriscos (aunque creas que ha dejado de funcionar, los caracteres que introduces sí se están teniendo en cuenta). Una vez introducidos tu nombre de usuario y contraseña correctamente, pueden aparecer (según la configuración del servidor por parte del administrador) uno o varios mensajes de aviso informando de las últimas novedades relacionadas con el uso de la máquina remota. Una vez se ha accedido a la cuenta, la máquina remota queda a la espera de recibir órdenes y lo indica mediante el prompt del sistema (generalmente de la forma $, usuario@maquina_$ o algo por el estilo). Por ejemplo, podemos teclear la orden ls -l para solicitar un listado largo de los contenidos del directorio en el que estamos situados (para empezar, el directorio personal del usuario). Para terminar la sesión de trabajo con la máquina remota, finalizando la ejecución de telnet, hay que dar la orden exit. Recuerda que el principal inconveniente de telnet es que toda la comunicación con el servidor “viaja” en texto plano (ASCII o alguna de sus extensiones) por la red. Es por ello que alguien malicioso “escuchando” las comunicaciones puede conseguir acceso a información confidencial. Por ello, ha caído en desuso hoy en día, prefiriéndose alternativas mucho más seguras como ssh. De hecho, no emplearemos el acceso mediante telnet en las prácticas ya que está deshabilitado en lynx por cuestiones de seguridad. 1.2. El cliente ssh SSH son las siglas de Secure SHell. Éste es un servicio de comunicación entre dos ordenadores, uno local y otro remoto, que permite servicios de conexión a distancia como los que facilita telnet. Su funcionamiento es exactamente igual que 1 No van a estar todos “pegándose” por utilizar el mismo teclado y monitor ;-). puede variar en función de la configuración del servidor. 2 Esto -2- EI(MT)1002. Informática Básica - 1er curso. Material de apoyo. Herramientas de Internet desde consola el de telnet: la única diferencia radica en que toda la información es codificada y cifrada automáticamente antes de ser transmitida a través de Internet (tanto en un sentido como en otro), lo cual permite establecer conexiones seguras. Hay muchos programas basados en SSH. Por ejemplo, uno de los más populares3 tanto en Windows como en Linux (véase la práctica anterior) es PuTTY. En Linux podemos utilizar la aplicación ssh seguida del nombre de la máquina con la que se desea establecer la conexión remota y, posiblemente, indicando el nombre del usuario con el que queremos acceder a la máquina (separado del nombre de la máquina por el carácter @). Si no indicamos el nombre de usuario (esto es algo opcional) ssh usará el mismo nombre que tiene el usuario que ejecuta el programa en la máquina local. Por ejemplo, si el usuario al000000 en la máquina local quiere conectarse a lynx.uji.es en la que tiene el mismo nombre de usuario, teclearía: ssh lynx.uji.es Sin embargo, si quisiera conectarse, por ejemplo, a la máquina lepus.uji.es en la que tiene una cuenta con el nombre de usuario juancar, teclearía: ssh juancar@lepus.uji.es En ambos casos, se establece una conexión segura con la máquina remota. No obstante, debes tener en cuenta que si el ordenador local no “conoce” todavía al remoto4 se mostrará un mensaje de este tipo: The authenticity of host ’lynx.uji.es (150.128.40.114)’ can’t be established. RSA key fingerprint is ee:ab:d4:b6:fe:0d:90:7b:0f:9f:11:41:4d:5f:6b:14. Are you sure you want to continue connecting (yes/no)? Si éste es el caso, debes contestar yes y pulsar Enter . A continuación, el sistema remoto solicita la contraseña. Una vez introducida ésta correctamente, el usuario ya puede ejecutar órdenes en el ordenador remoto (servidor). Para terminar la sesión de trabajo con la máquina remota, finalizando la ejecución de ssh, teclearemos la orden exit (como con telnet). Si se desean ejecutar aplicaciones gráficas, mostrando la salida (los gráficos) en la pantalla del ordenador local, deberemos emplear la opción -X: ssh -X juancar@lepus.uji.es en el ejemplo. Para que esto funcione correctamente, se requieren dos condiciones: I El administrador del sistema remoto debe haber configurado el servidor ssh de manera que admita la posibilidad de usar la opción -X en la conexión (en la mayoría de sistemas Linux, por defecto es así al instalar y configurar el servicio ssh). I Tanto el ordenador remoto como el ordenador local deben usar un sistema gráfico compatible: el entorno X-Window de Unix. Por tanto, la conexión debe establecerse entre máquinas Unix (recuerda que Linux es una variedad más de Unix). Además, se aconseja que la conexión entre ambas máquinas sea rápida (un ancho de banda medio de 2-3 Mbps. al menos). Si no, los gráficos se mostrarán demasiado lentamente como para poder trabajar en el ordenador local. También quisiéramos indicar otra característica interesante de ssh. ¿Qué ocurre si solamente queremos ejecutar una orden concreta en la máquina remota y no realmente establecer una conexión? Pues, podemos hacerlo. Imagina que solamente queremos ejecutar la orden ls -l en la máquina lepus.uji.es como el usuario juancar: ssh juancar@lepus.uji.es “ls -l” La salida del programa sería el resultado de ejecutar la orden ls -l en el directorio personal del usuario juancar en lepus.uji.es. Si quisiera listar el contenido de un directorio determinado tendría que haber indicado la ruta a ese directorio desde el directorio personal de juancar. Observa que la orden a ejecutar se escribe siempre entrecomillada tras el nombre de la máquina remota. 2. Transferencia de ficheros FTP (siglas de File Transfer Protocol) es el servicio básico que permite la transferencia de ficheros entre distintos ordenadores conectados a Internet. Como la mayor parte de los servicios de Internet, para hacer uso de él se debe ejecutar un programa que permita conectarse desde el ordenador local que estamos utilizando al ordenador remoto que proporciona dicho servicio. 3 Ya que, además, agrupa el acceso a una serie de servicios entre los que se encuentra, por ejemplo, telnet. nunca antes se había establecido una conexión con él por parte del usuario. 4 Porque -3- EI(MT)1002. Informática Básica - 1er curso. Material de apoyo. Herramientas de Internet desde consola Utilizando este servicio se pueden transferir ficheros a/desde ordenadores en los que tenemos una cuenta, es decir, en los que se nos ha proporcionado un usuario (login) y una contraseña (password). En nuestro entorno de trabajo estos ordenadores son, por ejemplo, lynx.uji.es para los estudiantes y lepus.uji.es para el personal de administración y servicios y el profesorado. Además, también se pueden transferir ficheros entre ordenadores que ofrecen el servicio de FTP anónimo. Estos ordenadores suelen utilizarse para mantener información y software de libre acceso a todo el mundo: en este caso sólo se pueden realizar transferencias para descargar ficheros desde dichos servidores (por ejemplo, los servidores ftp.suse.com o ftp.rediris.es). Otra utilidad que se está dando a este servicio es la posibilidad de entrega remota de documentos como, por ejemplo, la presentación de ponencias a organizadores de congresos científicos para su evaluación: en este otro caso las transferencias sólo se pueden hacer para enviar ficheros. En estos apuntes presentaremos algunos de los programas disponibles para Linux5 . Concretamente, estudiaremos la utilización de los programas de consola ftp y scp. 2.1. El cliente ftp Tendrás que ejecutar el programa ftp para Linux desde un terminal. Cuando ejecutes este programa, tendrás que pasarle como parámetro el nombre de la máquina (equivalentemente, su dirección IP) a la que deseas conectarte. Por ejemplo, si quieres conectarte al servicio FTP de lynx.uji.es: ftp lynx.uji.es La máquina remota responderá solicitando el nombre del usuario en el sistema. Una vez introducido el nombre de usuario, se solicita la contraseña. Los caracteres tecleados en la contraseña no se visualizan de ningún modo (aunque no se vean en pantalla, los caracteres que introduces sí se están teniendo en cuenta). Una vez introducidos tu nombre de usuario y contraseña correctamente, aparecerá, normalmente, un mensaje indicando el S.O. que posee la máquina a la que nos hemos conectado y el modo en que se van a realizar las transferencias: binario o ASCII. $ ftp lynx.uji.es Connected to lynx.uji.es. 220 (vsFTPd 2.0.1) 530 Please login with USER and PASS. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (lynx.uji.es:user): al000000 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> En el modo binario se transfiere un flujo de bits, mientras que en el modo ASCII (texto) se transfiere un flujo de bytes, siendo cada uno de ellos un carácter del código ASCII o, en la actualidad, de alguna de sus extensiones compatibles, tal como UTF-8 o ISO_8859-15. El modo ASCII sólo conviene utilizarlo cuando se está seguro de que el fichero que se transfiere contiene caracteres ASCII o derivados, como por ejemplo es el caso de los ficheros de texto. Si queremos conectarnos a un FTP anónimo, podemos hacerlo del mismo modo, pero cuando se nos pide el nombre del usuario debemos introducir el del “usuario anónimo”, anonymous: $ ftp ftp.uji.es Connected to lepus.uji.es. 220 (vsFTPd 2.0.1) 530 Please login with USER and PASS. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (ftp.uji.es:user): anonymous 331 Please specify the password. Password: 5 También existen versiones para Windows de estos programas cliente. -4- EI(MT)1002. Informática Básica - 1er curso. Material de apoyo. Herramientas de Internet desde consola 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. Nótese que la máquina remota pide una contraseña para el “usuario anónimo”: introduciremos nuestra dirección de correo electrónico como contraseña. Una vez establecida la conexión ftp hay un conjunto de órdenes bastante amplio que podemos dar. Estas órdenes se muestran al introducir la orden help. Las más habituales son las siguientes: bin: establece el modo binario para las transferencias de ficheros que efectuemos con posterioridad. ascii: establece el modo ASCII para las transferencias de ficheros que efectuemos con posterioridad. !orden: ! es un carácter “de escape” al intérprete de órdenes local. Con él se pueden ejecutar órdenes en el intérprete de la máquina local y ver su resultado en pantalla. Esto puede utilizarse para, por ejemplo, listar el contenido del directorio activo del ordenador local (!ls -l) o para crear uno nuevo en dicho ordenador local. ls: lista el contenido del directorio activo en el ordenador remoto. La orden dir es equivalente. cd <directorio>: permite cambiar de directorio en el ordenador remoto. lcd <directorio>: permite cambiar de directorio en el ordenador local. Equivale a !cd <directorio>. mkdir <directorio>: permite crear un directorio en el ordenador remoto. Para crear un directorio en el ordenador local se usaría !mkdir <directorio>. put <fichero>: transfiere un fichero del ordenador local al ordenador remoto. mput <ficheros>: transfiere un conjunto de ficheros del ordenador local al ordenador remoto. Los ficheros que se transfieren son aquellos que se especifican mediante el uso de los comodines * y ? o con cualquier expresión regular, en general. get <fichero>: transfiere un fichero del ordenador remoto al ordenador local. mget <ficheros>: transfiere un conjunto de ficheros del ordenador remoto al ordenador local. Los ficheros que se transfieren son aquellos que se especifican mediante el uso de los comodines * y ? o con cualquier expresión regular, en general. prompt: cuando se utilizan las órdenes de transferencia mget y mput existe la posibilidad de que el programa pregunte si realmente se desea o no transferir cada uno de los ficheros especificados (modo interactivo) o bien que, sin solicitar ningún tipo de confirmación, se realice la transferencia de todos los ficheros (modo no interactivo). Pues bien, prompt off pone el modo no interactivo y prompt on activa el modo interactivo. close: cierra la conexión ftp con la máquina remota pero no termina la ejecución del programa, por lo que se puede abrir una nueva conexión con la misma u otra máquina empleando la orden open (open ftp.rediris.es, por ejemplo). bye: cierra la conexión ftp y finaliza la ejecución del programa. 2.2. El cliente scp Éste es un servicio de copia segura: scp (abreviatura de secure copy) permite copiar ficheros entre ordenadores distintos a través de la red. Utiliza el mismo modo de identificación que ssh (de la forma usuario@maquina) y proporciona su mismo nivel de seguridad (de hecho, comparten la misma “capa” de cifrado). Por ejemplo, si el usuario al000000 de la máquina local pretende copiar el fichero practica.pdf en su directorio personal de lynx.uji.es, ejecutaría (no hace falta especificar usuario en la máquina remota ya que son el mismo): scp practica.pdf lynx.uji.es: a lo que lynx contestará pidiendo la contraseña del usuario especificado: $ scp practica.pdf lynx.uji.es: al000000@lynx.uji.es’s password: practica.pdf 100% |***************************************| 737 00:00 $ -5- EI(MT)1002. Informática Básica - 1er curso. Material de apoyo. Herramientas de Internet desde consola Fíjate bien en los dos puntos (:) que aparecen tras el nombre del ordenador remoto en la orden tecleada en el ejemplo. Una vez introducida correctamente la contraseña, se realiza la copia del fichero al ordenador remoto y termina la ejecución de scp, por lo que vuelve a aparecer el prompt del intérprete de órdenes local. Pero si dicho usuario al000000 pretende copiarlo al directorio personal del usuario juancar en lepus.uji.es, ejecutaría6 : scp practica.pdf juancar@lepus.uji.es: Por supuesto, y al igual que con la orden cp, es posible especificar rutas, tanto en origen como en destino: scp Practicas/IB/practica.pdf juancar@lepus.uji.es:Asignaturas/IX01/Internet/ Y, por supuesto, renombrar la copia efectuada en la máquina remota: scp Practicas/IB/practica.pdf juancar@lepus.uji.es:Asignaturas/IX01/Internet/p07.pdf o incluso emplear comodines: scp Practicas/IB/*.pdf juancar@lepus.uji.es:Asignaturas/IX01/Internet/ También es posible hacer copias del ordenador remoto al local: scp juancar@lepus.uji.es:Pelis/Hulk.avi Pelis/Aver/ Finalmente, quisiéramos indicar que la opción -r funciona igual que con la orden cp, ya que permite copiar recursivamente directorios enteros. 2.3. wget: una herramienta para gestionar descargas Ésta es una utilidad que sirve para descargar, en general, ficheros de Internet de forma no interactiva usando los servicios FTP (ftp://) o WEB (http://). En este sentido, wget no es igual que ftp o scp que pueden funcionar en los dos sentidos. Aunque permite identificación de usuarios, normalmente se emplea para descargar información pública. Para ello, utiliza los protocolos de dos de los servicios más utilizados en la red para estos menesteres, http y ftp, tal como acabamos de mencionar. Esta herramienta se ejecuta en modo texto: no es un programa gráfico7 , ni interactivo, pero tiene gran potencia y flexibilidad. Con wget es posible capturar páginas web (con sus ficheros asociados e incluso directorios ftp) recursivamente, de manera que se pueden hacer copias completas de sitios web que nos interesen. Esta herramienta se encuentra disponible tanto para Windows como para Linux y es software libre. A continuación, se explica mediante sencillos ejemplos el manejo básico de wget (existen un montón de opciones más). Así, para capturar una única página web, por ejemplo <http://www.uji.es>, sin los gráficos que la acompañan y sin seguir los enlaces que hay en ella, ejecutaríamos la orden: wget http://www.uji.es Si lo que queremos es capturar un sitio web completo, utilizaremos la opción -m (m indica mirror): wget -m http://www.uji.es Debemos tener cuidado con esta opción, ya que hará una copia exacta de todo el sitio web en nuestro disco duro. Si tan sólo nos interesa capturar la página principal del sitio web y seguir un determinado número de niveles a partir de los enlaces que hay en dicha página, utilizaremos la opción -l (¡ojo! el nivel 0 indica seguir los enlaces que realiza la propia página y nada más). Por ejemplo, para seguir sólo tres niveles en los enlaces utilizaríamos la orden: wget -r -l3 http://www.uji.es Con la opción -r indicamos que deseamos hacer una captura recursiva y con la opción -l3 indicamos que se deben seguir tres niveles de recursividad. Hay que tener en cuenta que tal y como estamos ejecutando la orden wget se seguirán todos los enlaces, tanto los que quedan dentro del mismo dominio como los que llevan a otro dominio distinto (fuera del sitio web original). Para evitar este comportamiento, podemos utilizar la opción -np de modo que no se sigan los enlaces que apuntan a otros sitios web (sólo se accedería a las páginas web de un directorio siguiendo los enlaces que llevan a páginas y/o ficheros que están en sus subdirectorios): 6 Se supone que el usuario al000000 conoce la contraseña del usuario juancar en lepus. existen interfaces gráficas que facilitan su manejo, tales como gwget en el entorno GNOME —pero no hay versión para GNOME 3— o WinWGet para Windows. 7 Aunque -6- EI(MT)1002. Informática Básica - 1er curso. Material de apoyo. Herramientas de Internet desde consola wget -r -l3 -np http://www.uji.es La opción -k permite convertir los enlaces no relativos en enlaces relativos localmente de modo que los enlaces también funcionen en el sitio web local que se está copiando. La información copiada mantiene la misma estructura que tenía en el servidor y se copia en un directorio que se crea en el ordenador local (en el directorio activo donde estamos situados) con el mismo nombre del sitio web al que accedemos para copiar8 . En el caso de nuestro ejemplo el directorio se llamará www.uji.es. Finalmente, wget también puede resultar de gran utilidad cuando queremos descargar un fichero de gran tamaño al que podemos acceder públicamente. Al tratarse de una descarga que puede tardar bastante tiempo (incluso horas) podría interrumpirse en algún momento, obligando a recomenzar la descarga cuando nos diésemos cuenta de la circunstancia. Si usamos la opción -c evitamos tener que comenzar a descargar el fichero desde el principio: si en el directorio donde estamos situados existe una copia parcial del fichero, la descarga proseguirá desde el punto en el que se interrumpió9 : wget -c ftp://pirates.movies.org/Movies/Hulk.avi Observa que, en el anterior ejemplo, estamos accediendo a un servicio público de FTP (FTP anónimo). Y es que wget “entiende” igualmente el protocolo FTP, de la misma manera que el HTTP y el HTTPS (como los navegadores). Además, wget permite utilizar comodines para especificar múltiples ficheros a descargar10 . Por ejemplo, si quisiéramos descargar todos los ficheros AVI del sitio anterior, ejecutaríamos: wget -c ftp://pirates.movies.org/Movies/*.avi Para más información, puedes consultar la ayuda del propio programa con la orden wget --help | less o bien ejecutar la orden man wget. Y no te aficiones demasiado al uso de este potente programa porque igual te puede ocurrir como a nuestro amigo El “Juanquer” en la tira cómica de la Figura 1. Figura 1: El “Juanquer” ha encontrado una motivación, al fin, para aprender a usar alguna de las herramientas que empleamos en nuestra asignatura. 8 Es posible que aparezca algún directorio más al mismo nivel dependiendo de la “estructura” del sitio web que estamos capturando. que el servidor permita reanudar descargas a partir de copias parciales, como es el caso de la mayoría de sitios web y ftp. 10 Esto sólo funciona con el protocolo FTP. Debes tener en cuenta que la configuración de algunos servidores FTP puede impedir el funcionamiento correcto en el uso de comodines. 9 Suponiendo -7-