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.
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.