UP | HOME |

Acceso remoto a un servidor vía Secure Shell (ssh)

Acceso remoto vía Secure Shell (ssh) a un servidor

Refugiado en su segura concha charra (secure shell) de las lejanas tierras, un enano escribe su centón mediante un acceso remoto al ordenador.

Fachada de la Casa de las Conchas
Casa de las Conchas, Salamanca.

Instalación de ssh

El programa ssh permite acceder remotamente a un ordenador. Después de configurar la conexión de internet es habitual instalar un servidor ssh. Así se consigue gestionarlo y utilizarlo de forma remota sin necesidad de ubicarse físicamente junto a la máquina. Instalamos en un ordenador con acceso a internet el servidor de ssh.

sudo apt-get install openssh-server

Por defecto abre el puerto 22. Ahora, cualquier ordenador accede al servidor mediante ssh, siempre que conozca el nombre de usuario y la contraseña.

ssh torres.epv.uniovi.es
ssh enano@torres.epv.uniovi.es

Acceso ssh sin necesidad de introducir cada vez la contraseña

Por defecto, ssh pide la contraseña cada vez que se conecta al servidor remoto. En un entorno seguro, este proceso se obvia. Seguimos las instrucciones detalladas aquí. Un ordenador personal se encuentra aquí, mientras que el servidor al que queremos acceder se ubica allí (torres.epv.uniovi.es). En el ordenador de aquí creamos claves públicas y privadas mediante ssh-key-gen.

ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/home/jsmith/.ssh/id_rsa):[Enter key]
Enter passphrase (empty for no passphrase): [Press enter key]
Enter same passphrase again: [Pess enter key]
Your identification has been saved in /home/jsmith/.ssh/id_rsa.
Your public key has been saved in /home/jsmith/.ssh/id_rsa.pub.
The key fingerprint is:
33:b3:fe:af:95:95:18:11:31:d5:de:96:2f:f2:35:f9 jsmith@local-host

Desde el ordenador de aquí transfiero estas claves al ordenador de allí mediante ssh-copy-id.

ssh-copy-id -i ~/.ssh/id_rsa.pub enano@torres.epv.uniovi.es

jsmith@remote-host's password:
Now try logging into the machine, with "ssh 'remote-host'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.

En situaciones más complejas (puertos diferentes, máquinas virtuales) existen otras variantes:


ssh-copy-id -i ~/.ssh/id_rsa.pub "enano@localhost -p 2222"
ssh-copy-id -i ~/.ssh/id_dsa.pub enano@192.168.1.101
ssh-copy-id -i ~/.ssh/id_rsa.pub cursoenano@156.35.137.100 -p 2222

Acabamos de copiar las claves de aquí al directorio ~/.ssh/authorized_key de allí. Desde aquí comprobamos que accedemos a allí sin introducir la contraseña.


ssh enano@torres.epv.uniovi.es
Last login: Sun Nov 16 17:22:33 2008 from 192.168.1.2
[Note: SSH did not ask for password.]

allí$ [Note: You are on remote-host here]

Para configurar el ssh-agent, añadimos las claves creadas.

exec ssh-agent bash
ssh-add
ssh-add -l

Enviar una instrucción a través de ssh

A veces, se necesita enviar una instrucción al servidor. En particular, cuando se queda sin memoria RAM el sistema se bloquea y no queda más remedio que reinicializarlo. En tal caso, la siguiente instrucción realiza tal tarea.

ssh enano@torres.epv.uniovi.es "echo 'password' | sudo -S reboot"

Túnel ssh

Supongamos que al servidor de allí enano@srv.rpct.es se accede mediante el puerto 2222. En dicho servidor se ejecuta una aplicación cuyos resultados se muestran en el puerto 3825. Por ejemplo las aplicaciones shiny visualizan los resultados a través del puerto 3825 en un navegador. Desde aquí creamos un túnel a allí:

ssh -NL 3825:localhost:3825 enano@srv.rpct.es -p 2222

En el navegador de aquí escribimos http://localhost:3825/. Se visualiza la aplicación shiny de allí. El puerto local viene en primer lugar.

Otro ejemplo con http://localhost:8080/ que redirige el navegador de allí al navegador de aquí.

ssh -R 8080:localhost:80  torres.epv.uniovi.es

Cambiando el puerto ssh

Por seguridad, a veces conviene cambiar el puerto por defecto de ssh. Recuerde que su proveedor de internet ha de abrir dicho puerto. En El centón de un enano no es así.

En el fichero /etc/ssh/sshd_config

cat /etc/ssh/sshd_config | grep Port

cambiamos el puerto a 2222

Port 2222

Revise los puertos en uso del servidor, reinicie el servicio ssh y compruebe la accesibilidad del puerto

cat /etc/services
sudo service ssh restart
ss -tulpn | grep 2222
netstat -tulpn | grep 2222

Ahora mediante alguno de los siguientes programas acceda al servidor por el puerto correspondiente:

ssh -p 2222 user@server
sftp -P 2222 openssh-server
scp -P 2222 source target
scp -P 2222 /path/to/foo user@server:/dest/

Acceso en modo gráfico

Por defecto, ssh accede en modo texto. Consta de una opción, X, que visualiza contenido gráfico (ventanas X11). Normalmente, en vez de utilizar directamente ssh, suelo acceder al ordenador remoto mediante una sesión ssh desde Emacs o bien mediante el entorno gráfico X2Go.

Si desea que el modo gráfico esté activo por defecto, edite el fichero ~/.ssh/config y añada las instrucciones siguientes. Aunque existen problemas de seguridad: solo utilice la opción X11 si confía plenamente en que no recibirá aquí ningún ataque desde el servidor de allí.


ForwardAgent yes
ForwardX11 yes

Host *
  Compression yes

La opción ForwardAgent permite almacenar las claves de acceso durante una sesión.