Remote Shell RSH

De Wikijoan
Dreceres ràpides: navegació, cerca

Important! El RSH ja no es fa servir i ha quedat substituït totalment pel SSH, que pot fer el mateix que el rsh, rlogin i rcp, perè de forma segura

Secure Shell (SSH) is a secure replacement for telnet, rlogin, rsh, and rcp. It uses encryption to keep information that you send over the network from being seen by others. It also uses public and private keys to validate that the host and client machines are who they say they are. 

Per tant, i abans de continuar llegint, saber que el que importa és conèixer i tenir ben configurat el ssh, i també és molt interessant el scp per copiar fitxers de forma remota.

The rsh package contains a set of programs which allow users to run commmands on remote machines, login to other machines and copy files between machines (rsh, rlogin and rcp). All three of these commands use rhosts style authentication. This package contains the clients and servers needed for all of these services. It also contains a server for rexec, an alternate method of executing remote commands. All of these servers are run by inetd and configured using /etc/inetd.conf and PAM. The rexecd server is disabled by default, but the other servers are enabled. The rsh package should be installed to enable remote access to other machines.

http://ubuntuforums.org/showthread.php?t=276769

Several things need to be in place:

El client rsh ve instal.lat per defecte ($ rsh i veure que dóna opcions). Ara bé, per fer rsh entre dues màquines ha d'estar instal.lat el servidor rsh a més del inetd.

Several things need to be in place:

1) in.rshd installed -> The in.rshd daemon is the server for the rsh(1) program.

2) portmap running and enabled

3) inetd / xinetd entries enabled and inetd service reloaded

sudo apt-get install rsh-server

Contingut

Instal.lació servidor rsh (in.rshd)

http://safari.oreilly.com/0130277010/ch09lev1sec16

The in.rshd daemon is the server for the rsh(1) program. The server provides remote execution facilities with authentication based on privileged port numbers.

$ sudo apt-get install rsh-server
$ /usr/sbin/in.rshd host.port

on host i port s'haurien de substituir per la IP a la que em vull connectar i per quin port. No dóna cap missatge, no estranyar-se.

in.rshd is invoked by inetd(1M) each time a shell service is requested and executes the following protocol.

The server checks the client's source address. If the address is associated with a host for which no corresponding entry exists in the host-name database (see hosts(4)), the server aborts the connection. Refer to "Security" for more details.

rshd listens for service requests at port 514

Ports: 514 when using old port based authentication, 544 for Kerberos 5 and non-encrypted Kerberos 4, and 545 for encrytpted Kerberos 4; subject of course to the contents of /etc/services

portmap: Mapeador de puertos de RPC

Portmap es un servidor que convierte números de programas RPC (Llamada a un Proceso Remoto, Remote Procedure Call) en números de puertos del protocolo DARPA. Debe estar ejecutándose para hacer llamadas RPC.

Entre los servicios que usan RPC se encuentran NFS y NIS.

sudo apt-get install portmap
...
 * Starting portmap daemon...

joan@ubuntu:/etc/init.d$ ps aux |grep portmap
daemon    1414  0.0  0.1   1812   456 ?        Ss   00:56   0:00 /sbin/portmap     

Dimoni inetd

És el internet "super-server"

sudo /etc/init.d/inetd stop
sudo /etc/init.d/inetd start
sudo /etc/init.d/inetd restart

No dóna cap missatge, no estranyar-se.

      Inetd should be run at boot time by /etc/init.d/inetd (or /etc/rc.local
      on some systems).  It then listens for connections on certain internet
      sockets.  When a connection is found on one of its sockets, it decides
      what service the socket corresponds to, and invokes a program to service
      the request.  After the program is finished, it continues to listen on
      the socket (except in some cases which will be described below).  Essen-
      tially, inetd allows running one daemon to invoke several others, reduc-
      ing load on the system.

És a dir, inetd escolta les peticions que li arriben d'internet (xarxa local o xarxa remota), i decideix quin és el programa que ha d'invocar per donar servei a la petició, en el nostre cas in.rshd, el servidor de remote shell

Ubuntu utilitza inetd en comptes de xinetd.

1a prova

després de fer la instal.lació, rsh localhost funciona

$ rsh localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
RSA key fingerprint is 37:25:5e:65:57:23:1d:df:0e:04:21:b9:ba:71:68:25.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
...
Last login: Thu Nov 13 00:41:55 2008 from 193.153.6.191
joan@ubuntu:~$ exit
logout
Connection to localhost closed.

$ rsh localhost ls -l #mostra els fitxers de la màquina a la que ens connectem, que és ella mateixa
#OK
$ rsh joan@localhost ls -l #OK
$ rsh -p 22 joan@localhost ls -la #OK, funciona pel port 22, com el SSH
ssh_exchange_identification: Connection closed by remote host
$ rsh -p 514 joan@localhost ls -la #falla
ssh_exchange_identification: Connection closed by remote host

el problema de configuració és per connectar-me des d'una màquina de la xarxa local i des d'una màquina remota.

Ara bé, veig que no hi ha cap problema, perquè com que tinc SSH instal.lat, sembla ser que tot el tema de RSH es fa amb SSH i pel port 22.

Configuració de seguretat

funciona perfectament tenint SSH ben configurat

client rsh

http://manpages.ubuntu.com/manpages/intrepid/man1/krsh.html

rsh [-45FGKdefnuxz] [-U string] [-p port] [-l username] [-P N|O] host [command]

rsh authenticates to the rshd(8) daemon on the remote host, and then executes the specified command. rsh copies its standard input to the remote command, and the standard output and error of the remote command to its own.

Exemples

$ client$ rsh otherhost cat remotefile > localfile
$ client$ rsh wikijoan.dyndns.org cat hola.txt > localfile

will write the contents of the remote remotefile to the local localfile, però compte, perque:

$ rsh otherhost ’cat remotefile > remotefile2’

el que farà és crear el fitxer en el remotefile2.

comprovació en la xarxa local

Em pensava que no funcionaria a la primera i que tindria que barallar-me amb tot el tema de permisos i autentificació, però la veritat és que funciona a la primera, ja que tinc SSH ben configurat. Les proves les faré entre el portàtil (192.168.1.9) i el servidor (192.168.1.130). En el servidor tinc instal.lada la clau pública que es va generar en el portàtil, de manera que el servidor confia en el portàtil.

$ rsh
usage: ssh [-1246AaCfgKkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-e escape_char] [-F configfile]
           [-i identity_file] [-L [bind_address:]port:host:hostport]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-R [bind_address:]port:host:hostport] [-S ctl_path]
           [-w local_tun[:remote_tun]] [user@]hostname [command]

El primer de tot és fixar-se que quan invoco rsh de fet estem invocant ssh. Per tant, aquí tinc un error conceptual i em fa pensar que tot el tema de rsh en realitat és ssh (calia instal.lar el servidor rsh?)

Efectivament, la prova funciona i a la primera:

portatil$ ssh 192.168.1.130 cat update.sql > update_portatil.sql
portatil$ rsh 192.168.1.130 cat update.sql > update_portatil.sql

portatil$ cat update_posrtatil.sql

aquestes dues línies són equivalents (ssh i rsh), i el contingut del fitxer update.sql, del servidor, es copia en un fitxer del portàtil (client).

comprovació en la xarxa remota

ho provo des de l'institut. Com que no hi ha autentificació, hauré de posar login i pwd:

ssh joan@wikijoan.dyndns.org cat update.sql > update_portatil.sql
password

el fitxer update.sql el busca a /home/joan. Funciona.

rlogin

portatil$rlogin 192.168.1.130

és totalment equivalent a

portatil$ssh 192.168.1.130

recordem que en aquest cas particular no fiquem login i password perquè hi ha una autentificació de clau pública i privada. Si no, s'hauria de posar

 portatil$rlogin joan@192.168.1.130

i demanaria el password

rcp

la formca correcta de fer rcp és scp, doncs ho fa de forma segura.

portatil$ scp hola.sql 192.168.1.130:hola_servidor.sql

També hi ha la possibilitat de copiar fitxers d'un ordinador remot a un altre ordinador remot.

portatil$ scp [[user@]host1:]file1 [[user@]host2:]file2

Com sempre, la gràcia perquè no demani login i password (i així poder automatitzar aquestes tasques en els scripts) és instal.lar una clau pública en els servidors, com està explicat en l'article de SSH

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines