El teu blog de Linux en català

En els sistemes Linux, podem controlar l’escriptori d’un ordinador des d’un altre per mitjà dels programes Vino (servidor d’escriptori remot) i Vinagre (client d’escriptori remot). Per a Windows, també es pot fer el mateix per mitjà del Terminal Server. En entorns Linux, també disposem d’un client de Terminal Server, des del qual podem visualitzar i interactuar remotament amb l’escriptori d’un ordinador Windows.

Per a poder-lo utilitzar, primer cal activar en l’ordinador Windows el servidor de Remote Desktop. Després, en el nostre ordinador amb Linux, trobarem el client de Terminal Server a «Aplicacions>Internet>Client de Terminal Server».

Pantalla del client de Terminal Server

Pantalla del client de Terminal Server

En aquest programa cal passar les dades de l’ordinador a què ens volem connectar. Per exemple, al camp «Ordinador» hi hem de posar la seva adreça IP o, si el tenim configurat a la xarxa, el seu nom. També podem configurar l’usuari de connexió, el domini i la contrasenya. Amb això, si fem clic a «Connecta» veurem que iniciem una sessió a l’ordinador remot en el nostre escriptori.

Apart d’això, hi ha altres configuracions que pot ser interessant modificar. Per exemple, a la pestanya «Pantalla» podem fer que quan ens connectem a l’ordinador remot se’ns mostri en pantalla completa. A la pestanya «Recursos locals» podem fer que el so que es generi en l’ordinador remot se’ns escolti a través del nostre ordinador, o (una opció molt interessant) que els nostres discos locals es vegin en la connexió que tenim a l’ordinador remot. D’aquesta manera, podrem intercanviar fàcilment fitxers entre el nostre ordinador local i el remot.

A la pestanya «Programes» podrem fer que, en iniciar la connexió remota, s’engegui de forma automàtica un programa. Des de la pestanya «Rendiment» podrem activar la memòria cau del mapa de bits per tal que la connexió vagi més ràpida. A més, un cop tinguem configurada la connexió a una certa màquina, ens podem desar aquesta configuració, per tenir-la disponible de forma senzilla.

Si tenim una o més connexions d’aquest estil desades, podem instal·lar en el panell superior de Gnome una miniaplicació que ens facilitarà la connexió a aquestes. Per a tenir-la, fem clic amb el botó dret sobre el panell superior de Gnome i seleccionem l’opció «Afegeix al quadre…». A la finestra que s’obri, fem doble clic sobre la «Miniaplicació del client de Terminal Server». Se’ns afegirà aquesta miniaplicació. Quan hi fem clic a sobre, ens sortiran totes les connexions que tinguem configurades, per tal que ens hi puguem connectar fàcilment, o per crear una connexió nova.

Miniaplicació del client de Terminal Server

Miniaplicació del client de Terminal Server

Com veieu, es tracta d’un client de Terminal Server molt complet i que ens permet una interacció molt gran entre el nostre equip Linux i l’ordinador Windows remot al que ens connectem.

En entorns domèstics, els sistemes operatius que utilitzem es redueixen sobretot a aquells basats o derivats de Unix (Linux, BSD, MacOS, etc.) i a Windows. A més, cal tenir en compte aquells sistemes operatius específics per a mòbils (Symbian, RIM, Palm OS, etc.). En entorns empresarials s’utilitzen també sistemes operatius basats o derivats de Unix (AIX, HP-UX, Solaris, etc.), però també altres sistemes que no hi tenen res a veure, com ara GCOS, VAX/VMS, MPE i algun altre (apart de tots els que jo no conec, que en deuen ser molts). 🙂

Entre els sistemes operatius del sector empresarial no basats en Unix, per a equips tipus Mainframe d’empreses mitjanes i grans són molt importants els d’IBM, començant per l’AS/400 i passant per MVS (OS/390, zOS). Per connectar-se a aquests ordinadors, és necessari fer-ho des d’un tipus de terminal específic, anomenat Terminal 3270. Per a GNU/Linux, tenim un programa Terminal 3270 que ens permet precisament connectar-nos i treballar amb aquests sistemes operatius d’IBM, el x3270.

La instal·lació d’aquest programa en el nostre ordinador és molt senzilla, perquè es troba en els repositoris oficials de la majoria de distribucions. Per exemple, en Ubuntu el podem instal·lar directament des de Synaptic per mitjà del paquet “x3270”. Si ens sentim més còmodes treballant des del terminal (el terminal “normal” de Linux), el podem instal·lar per mitjà de la comanda següent:

sudo apt-get install x3270

Un cop instal·lat, podrem obrir el programa des del menú “Aplicacions>Oficina>x3270”. Quan l’executem, ens obrirà una pantalla en negre. Des del menú “Connect>Other” li podrem indicar l’equip al que ens volem connectar.

Pantalla del x3270

Pantalla del x3270

Una opció molt interessant de modificar és el número de línies del Terminal 3270. De forma predeterminada, està posat a 80×24, però des del menú “Options>Screen Size>Model 3” el podrem posar a 80×32, força més útil. Segurament també ens interessarà indicar-li amb quina codificació de caràcters ha de treballar. Aquests entorns IBM utilitzen codificacions EBCDIC, en comptes d’ASCII o UTF-8. Podrem trobar les codificacions EBCDIC més habituals (i altres que no ho són tant) a “Options>Character Set>…”. Les més habituals són la English o la Spanish (amb o sense símbol d’Euro). Des del menú “Options>Toggles>…” podreu trobar un munt d’opcions que es poden activar. Un cop tingueu les opcions escollides, us recomano que aneu a “File>Save Changed Options in File”. Si deseu les opcions en el fitxer que us proposa, quan engegueu el x3270 el proper cop s’agafaran de forma predeterminada.

Un cop hem après a executar comandes de forma segura en un ordinador remot, ens falta veure com executar programes que tinguin interfície gràfica. Havent llegit l’anotació aquesta és força senzilla, perquè només cal afegir el paràmetre “-X” al programa ssh.

Això ens pot servir, per exemple, si volem jugar en un ordinador on no el tenim instal·lat, al Secret Maryo Chronicles, sempre i quan estigui instal·lat en l’ordinador que ens farà de servidor. O també si volem executar una còpia de seguretat dels fitxers del servidor per mitjà del Grsync que té instal·lat. Per a fer aquest segona opció, des del nostre ordinador client executem la comanda següent:

ssh -X usuari_servidor@ip_servidor grsync

En executar aquesta comanda, se’ns obrirà una finestra del Grsync. És important saber que el programa realment s’està executant en el servidor, però que aquest l’està mostrant per la pantalla del client, en comptes de la seva pròpia pantalla. És a dir, aquest programa consumeix la memòria i la cpu del servidor. A més, el servidor “encripta” la pantalla a mostrar i ens l’envia per la xarxa. El nostre ordinador client, l'”únic” que fa és desencriptar-la i mostrar-la.

O sigui, que aquest mètode carrega molt el servidor, sobretot depenent del programa que executem, perquè a més d’executar el programa en sí, ha d’anar encriptant en temps real les pantalles que ens ha d’enviar. Si l’ordinador al que us connecteu no és molt potent, aquest no és el mètode més adient per a executar remotament alguns programes “gràficament potents”.

Per exemple, amb l’ordinador que jo estic utilitzant de servidor, que té uns 6 anys, i està força desfasat, no tinc cap problema per executar remotament el Grsync, però l’execució remota del Secret Maryo Chronicles el satura. Amb ordinadors més nous, es pot fer sense problemes.

Fins ara, hem après algunes eines que formen part de ssh i que ens permetien, per mitjà d’una connexió xifrada, copiar fitxers amb scp o navegar pels directoris remots amb sftp. En aquesta anotació veurem com connectar-nos des d’un terminal del nostre ordinador a l’equip remot, de manera que totes les comandes que executem es faran en el servidor.

Això ens serà molt útil en entorns empresarials, on tenim diversos servidors, i no podem anar a treballar físicament en cadascun d’ells, perquè potser estan en diverses ubicacions, o en CPDs. En entorns domèstics, on els ordinadors són molt més propers, segurament la seva utilitat és més limitada, però no descartable.

Per a connectar-nos des d’un terminal a un ordinador remot (com hem comentat en articles anteriors, ha de tenir instal·lat el paquet “openssh-server”), cal executar la comanda següent:

ssh usuari_servidor@ip_servidor

Aquesta comanda ens connectarà directament amb el servidor si hem configurat correctament la connexió a través de clau pública+clau privada. En cas contrari, ens demanarà la paraula de pas de l’usuari en el servidor.

Un cop establerta la connexió, totes les comandes que escrivim en aquest terminal seran executades en el servidor, i aquest ens mostrarà la resposta de les comandes a través del mateix terminal des del que estem connectat. És a dir, és com si, en el terminal, estiguéssim connectats de forma local en el servidor i, per tant, veurem la seva estructura de directoris i els seus fitxers, però no els “nostres”. Per a tancar la connexió amb el servidor, només cal executar en el mateix terminal l’ordre següent:

exit

Una altra opció que tenim amb ssh és la d’executar-hi una comanda qualsevol, però sense mantenir la connexió establerta un cop s’acabi l’ordre. Això es pot fer amb la comanda següent:

ssh usuari_servidor@ip_servidor "ordre_a_executar_al_servidor"

Aquesta comanda executa l’ordre indicada en el servidor. El servidor ens retorna la resposta de la comanda i, un cop acabada, tornem a tenir el terminal desconnectat del servidor (de forma que no cal executar “exit” per a desconnectar-nos).

De moment, tal i com ho hem vist fins ara, només podrem executar comandes del servidor que no tinguin interfície gràfica (si ho provem, ens donarà l’error “no display specified“). En la propera anotació veurem com executar programes de l’ordinador remot que tinguin interfície gràfica.

Fins avui, hem vist un parell d’eines que permeten la connexió segura entre dues màquines a través del protocol ssh (en el cas de Linux, l’estem fent amb la implementació lliure openssh). Els dos programes que hem vist fins ara, i que formen part del grup d’eines de ssh són el scp i el sftp (totes dues ens servien per a copiar fitxers de forma segura entre equips). El protocol ssh funciona amb una arquitectura client-servidor. És a dir, hi ha un ordinador (el client) des del qual ens connectem a un equip remot (el servidor). Com vam veure en l’anotació del sftp, a la majoria de distribucions hi ha instal·lat el client ssh (per a poder-nos connectar amb altres equips per mitjà de ssh), però no el servidor, i per tant, hem d’instal·lar el paquet “openssh-server” en aquells equips on volem acceptar connexions d’altres ordinadors (els servidors).

Logo d'OpenSSH

A l’hora d’identificar-nos en el servidor, ssh preveu dos mètodes bàsics. El primer és el que hem vist fins ara: ens intentem connectar, i el servidor ens demana l’usuari i la contrasenya. El segon mètode és el que mostrarem en aquesta anotació: emprar l’infrastructura de clau pública i clau privada. Bàsicament, el que farem és, en el client, generar un parell de claus: una de privada, que ens quedarem per a nosaltres, i una altra de pública, que enviarem als equips als quals ens vulguem connectar per tal que puguin desxifrar el que els enviem. L’avantatge d’això és que, un cop el servidor accepti la nostra clau pública, no haurem d’entrar mai la contrasenya de l’usuari de connexió.

Per a generar el nostre parell de claus (pública + privada), hem d’executar la comanda següent des d’un terminal de l’ordinador client:

ssh-keygen

Si premem [Enter] a totes les preguntes que ens faci el programa, ens generarà dos fitxers en el propi equip client, tots dos en el directori /home/el_nostre_usuari/.ssh:

  • id_rsa: És la nostra clau privada. L’hem de deixar tal qual.
  • id_rsa.pub: És la clau pública. La passarem a l’equip que faci de servidor.

Ara, hem de copiar la nostra clau pública a l’ordinador que ens fa de servidor. Podem aprofitar el propi programa scp, executant des d’un terminal en l’equip client:

scp /home/el_nostre_usuari/.ssh/id_rsa.pub usuari_servidor@ip_servidor:id_rsa.pub

Aquesta comanda ens demanarà la paraula de pas de l’usuari del servidor (perquè encara no hi tenim acceptada la nostra clau). Aquesta ordre ens haurà deixat la nostra clau pública al directori /home/usuari_servidor. Per tal que el servidor accepti aquesta clau, només cal afegir el contingut de la clau pública al final del fitxer authorized_keys del servidor. O sigui que, en el servidor, i des d’un terminal, executem la comanda següent:

cd /home/usuari_servidor
cat id_rsa.pub >> .ssh/authorized_keys

I ja ho tenim. A partir d’ara, quan des de l’equip client utilitzem qualsevol programa que formi part del grup d’eines de ssh (com el scp, el sftp i alguna altra que veurem en anotacions futures), com a destí només caldrà posar “usuari_servidor@ip_servidor“, i en cap moment ens demanarà la seva contrasenya, perquè s’acceptarà automàticament. Per exemple, ens podrem connectar via sftp amb les comandes següents:

sftp://usuari_servidor@ip_servidor

En cap moment ens demanarà la contrasenya de l’usuari. És més, si el nom d’usuari del client i del servidor són el mateix, nomès caldrà posar “ip_servidor” (en el cas de sftp, serà “sftp://ip_servidor“).

En anotacions posteriors veurem altres coses que podem fer amb les eines del paquet ssh.

Fa unes setmanes, el Pol ens va explicar com copiar fitxers des de terminal de forma segura a un ordinador remot. Avui veurem com navegar, també de forma segura, per les carpetes i fitxers d’un equip remot, de manera que hi treballarem com si fos un directori propi, i hi podrem copiar dades, visualitzar documents, o el que més ens interessi.

El primer que necessitem és instal·lar el servidor ssh en l’equip al qual ens volem connectar (això també era necessari en l’scp que ens va presentar el Pol). Això es pot fer a través del paquet “openssh-server”, que tenim disponible directament des dels repositoris oficials de la majoria de distribucions. En el cas d’Ubuntu, el podem instal·lar directament des del Synaptic o, si ho preferim, des d’un terminal:

sudo apt-get install openssh-server

D’aquest ordinador remot, apart, necessitem saber la seva adreça ip. Podem conèixer-la executant-hi la comanda següent:

ifconfig | grep "inet addr"

Aquesta comanda ens retornarà dues adreces ip: la 127.0.0.1 i una altra. Ens interessa l’altra. 🙂

Un cop instal·lat el servidor en la màquina remota, en el nostre equip local obrim un Nautilus (o l’explorador de fitxers que utilitzem habitualment) i, en la barra d’adreces escrivim el següent:

sftp://adreça_ip_remota

Amb aquesta comanda, el primer cop que ens connectem ens demanarà confirmació. Acceptem, i després ens demanarà l’usuari i constrasenya amb què ens volem connectar.

El servidor remot ens demana l'usuari de connexió

El servidor remot ens demana l'usuari de connexió

Un cop entrades, ja hi estarem connectats, i ens podrem moure pels seus directoris com si fos la nostra màquina local. Com sabrem si estem veient els nostres directoris o els remots? Doncs, perquè a la barra d’adreces el nostre directori actual començarà per “sftp://adreça_ip_remota” si estem veient els directoris remots.

Nautilus amb la connexió a l'equip remot

Nautilus amb la connexió a l'equip remot

Apart d’això, si us fixeu en la captura anterior, a la barra lateral del Nautilus tindrem un accés directe a aquest equip remot, com si fos un dispositiu que hàgim connectat, del qual ens podrem desonnectar també com si desmuntéssim un dispositiu.

Amb aquesta connexió, com he comentat abans, podrem copiar fitxers d’un equip a l’altre, obrir els documents remots, copiar carpetes, o el que més ens interessi. A més, com que estem utilitzant la infrastructura ssh, totes les dades viatjaran xifrades.

Per últim, només volia comentar que el programa sftp també es pot invocar des d’un terminal, de la mateixa manera que ho hem fet des del Nautilus.