SSH son las siglas de Secure SHell. Lo que te ofrece es una consola en un ordenador remoto con los privilegios que tenga la cuenta con la que conectes. Es decir, si en tu PC tienes varias cuentas, puedes conectar desde otro ordenador al tuyo con cualquiera de esas cuentas y sus respectivos privilegios. Y todo esto con encriptación de datos.
Instalar SSH
Para instalarlo en una terminal escribir el comando:
su
poner la contraseña de root, a partir de ahora y en todo el tutorial vamos a trabajar como usuario root.
(si desconoces la contraseña de root, usa "sudo -i" y pones tu propia contraseña)
apt-get install ssh
Una vez instalado se autoiniciará el demonio que ejecuta el servidor SSH y gestiona las solicitudes de login remoto, podemos verificarlo con el comando:
ps aux | grep sshd
Mejorando la seguridad
No es muy inteligente usar SSH sin modificar el fichero de configuración del servidor. Vamos a modificar algunas opciones para conseguir una seguridad aceptable.
nano -wB /etc/ssh/sshd_config
Cambiaremos el puerto que trae por defecto (22). Esto no quita que un intruso pueda intentar averiguar que puerto usamos si sabe cómo hacerlo, pero al menos le ponemos impedimentos. También hay scripts que atacan directamente el puerto 22, por lo que el cambio de puerto es algo obligatorio.
port 4444
También podemos especificar por cuál interfaz de red escuchará nuestro servidor, en este caso acepto conexiones por la interfaz de red cuya IP es 192.168.0.113
ListenAddress 192.168.0.113
Un poco más abajo en la opción "Protocol" debe estar a valor 2 ya que hay dos versiones de protocolo SSH. La primera está ya en desuso y tiene varias vulnerabilidades.
Protocol 2
Buscar la sección “Authentication”. Sus dos primeras opciones son importantes. La primera es el número de segundos que tendrá el usuario remoto para hacer login en tu máquina. Establecer este valor a pocos segundos, no tardamos mucho en hacer login si sabemos la cuenta y la contraseña. De esta forma evitamos ciertos scripts que se aprovechan de ese tiempo. El valor típico en términos de seguridad es 30.
LoginGraceTime 30
Justo debajo está otra de las opciones más importantes, PermitRootLogin.
Si tenemos esta opción habilitada (yes) el un intruso ya tiene la mitad del trabajo hecho, pues el usuario “root” existe en todas las máquinas GNU/Linux, tan sólo le queda averiguar la contraseña. Por eso es más que recomendable des-habilitar esta opción. Los usuarios que desean hacer un uso administrativo, pueden hacerlo con "su" o con "sudo" sin problema alguno.
PermitRootLogin no
De ser necesario negamos el uso remoto de aplicaciones gráficas en nuestro servidor
X11Forwarding no
Otra opción que define el número máximo de usuarios conectados simultáneamente a tu máquina. Esto ha de adaptarse a tus propias necesidades. Si estamos hablando de un ordenador personal donde sólo vas a conectar tú, pues lo lógico sería que como mucho hubiera una. Si estamos hablando de un ordenador que hará las veces de servidor compartiendo una carpeta a varias máquinas, deberás decidir cuántos son. Cuanto tengas claro el número indícalo en la siguiente opción:
MaxStartups 5
Mostrar un mensaje de bienvenida antes de conectarse al servidor
Banner /etc/issue.net
También se puede especificar las cuentas que tienen permitido el uso SSH (AllowUsers).
De esta forma tú podrías usar tu cuenta (alband) para conectar a tu equipo desde cualquier lugar (aunque esto lo pulimos más abajo con iptables), y el usuario pepe podría hacerlo sólo desde su ordenador (si tiene esa IP).
Agregamos al final del archivo las siguientes líneas:
# Permitir el acceso a ciertos usuarios
AllowUsers alband [email protected]
Guardamos los cambios y salimos del editor.
Con esto tenemos un servidor SSH bastante seguro.
Sólo resta reiniciar el propio servidor SSH para que tome los cambios que hemos efectuado en su configuración. Escribir en consola:
/etc/init.d/ssh restart
Abrir cortafuegos
En el firewall correspondiente en caso de tener la política por defecto en DROP, es necesario agregar la regla de entrada y de salida.
#Permitir conexión entrante SSH solo desde 2 IP
iptables -A INPUT -i eth0 -s 192.168.0.101 -p tcp --dport 4444 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -s 192.168.0.109 -p tcp --dport 4444 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 4444 -j LOG --log-prefix "Intento-SSH: "
#Permitir salir a la conexión SSH
iptables -A OUTPUT -o eth0 -p tcp --sport 4444 -m state --state ESTABLISHED -j ACCEPT
Podemos verificar las reglas
iptables -nL
De esta forma, permitimos que los clientes se conecten desde las ip 192.168.0.101 y la 192.168.0.109.
Importante es resaltar que desde el servidor no será posible iniciar una conexión al exterior, solo responde a conexiones iniciadas desde afuera que cumplan con las reglas de INPUT.
Si no tenes un cortafuegos configurado, podes ver en mis aportes anteriores para tener uno (recomendable).
Uso de SSH en consola
Ahora que tenemos SSH bien seguro podemos conectarnos.
Se entiende que debes tener una cuenta en el equipo a conectarse. La forma de conectar es la siguiente:
ssh -p 4444 [email protected]
Aceptamos con "yes" y tras esto pedirá la contraseña, si demoras más de 30 segundos se denegará la conexión.
La introducimos y tras un texto de "bienvenida" veremos que nuestro prompt ha cambiado a "nombre_cuenta@nombre_equipo".
A partir de este instante tu consola está controlando el equipo remoto. Estarás en el home de la cuenta con la cuál te conectaste a la máquina remota.
Igualmente hay varias formas de logearse mediante ssh:
ssh -p 4444 -l alband 192.168.0.101
Se especifica el nobre del usuario con -l
ssh -p 4444 servidor2013.redinterna.net
Se conecta con el usuario que esta actualmente logueado en el sistema local
ssh -p 4444 [email protected]
Como nos conectamos la primera vez pero poniendo el nombre del host
ssh -p 4444 -l alband servidor2013.redinterna.net
Se especifica el nobre del usuario con -l
ssh -p 4444 192.168.0.101
Se conecta con el usuario que esta actualmente logueado en el sistema local
Cerrar una cesión SSH
Hay varias formas de cerrar la sesión de SSH correctamente.
exit
logout
(Ctrl+d)
SSH sin contraseña pero más seguro
Lo que haremos será eliminar el hecho de introducir la contraseña y añadir la necesidad de identificarse (de forma automática) mediante una firma RSA que tendremos almacenada
Atención:
Si tiene una llave creada no debe crear una nueva, ya que esta remplazará la anterior, verificar con cat /home/tu-usuario/.ssh/id_rsa.pub
Desde el cliente ejecutamos este comando para crear la llave ssh
ssh-keygen -t rsa
Presionar enter 3 veces
Copiar las llaves al servidor remoto
Ahora que hemos generadas las llaves, necesitamos copiarlas al servidor remoto. Por defecto, para OpenSSH, la llave publica necesita ser concatenada dentro de ~/.ssh/authorized_keys
Creamos el directorio que va a recibir la llave en el servidor
ssh -p 4444 [email protected] mkdir ~/.ssh
cat ~/.ssh/id_rsa.pub | ssh -p 4444 [email protected] 'cat - >> ~/.ssh/authorized_keys'
(el comando anterior se debe escribir en una sola línea, ver la imagen)
Luego de lo realizado anteriormente, vemos que continúa pidiendo la contraseña, debemos cerrar la cesión en el cliente para tomar la nueva configuración.
Probamos nuevamente y vemos que se conecta sin pedir contraseña, vamos ahora a cambiar unos permisos.
Otorgamos los permisos correctos al archivo authorized_keys
chmod 600 ~/.ssh/authorized_keys
y el siguiente comando es para deshabitar los permisos de escritura para 'group' y 'other' en el directorio ~/.ssh
chmod go-w ~/.ssh
salimos con
exit
Ahora veamos que podemos hacer con SSH
Copiar ficheros con SCP
Scp es una aplicación de copiado remoto que utiliza el protocolo ssh, al trabajar directamente sobre ssh este utiliza los alias y las configuraciones puestas a ssh para trabajar.
Copiar un fichero o directorio remoto
Supongamos que quiero copiarme un fichero llamado documento1 que está en el home de la cuenta alband en el servidor (el ordenador remoto)
(Nota) Ojo con la ‘P’ que en este caso debe ser mayúscula.
scp -P 4444 [email protected]:~/documento1 ~/nuevo
podemos visualizar lo que se copio en el equipo local con
more nuevo
Por otro lado si lo que queremos copiar es una carpeta, basta con añadirle el parámetro ‘-r’ para que copie todo su contenido (r=recursivo).
scp -P 4444 -r [email protected]:~/datos-server ~/datos-server-copiados
podemos visualizar lo que se copio en el equipo local con
ls -l datos-server-copiados
Enviar un fichero o directorio
Ahora desde nuestro equipo local copiamos al remoto:
Copiar un archivo
scp -P 4444 ~/saldo-diario [email protected]:~/saldo-diario-alband
podemos visualizar lo que se copio en el equipo remoto con
ssh -p 4444 [email protected] cat ~/saldo-diario-alband
Copiar un directorio con todo su contenido
scp -P 4444 -r ~/saldo-semanal [email protected]:~/saldo-semanal-alband
podemos visualizar lo que se copio en el equipo remoto con
ssh -p 4444 [email protected] ls -l ~/saldo-semanal-alband
Para tareas administrativas podemos hacer uso de su o de sudo, ya que como configuramos antes el usuario root no puede establecer una conexión con el servidor
reboot
O apagarlo:
halt
Enviar comandos al servidor
También podemos enviar comandos al servidor sin iniciar cesión
ssh -p 4444 [email protected] who
ssh -p 4444 [email protected] last
ssh -p 4444 [email protected] uname -a
El abanico de posibilidades es realmente inmenso.
Sin embargo algunos comandos que a veces requieren mostrar información en tiempo real no se llevan bien con este método:
ssh -p 4444 [email protected] top
Para solucionar esto mandamos llamar a una pseudo terminal (pseudo-tty), lo logramos con el parámetro -t que fuerza la salida del comando vía ssh a una pseudo terminal:
ssh -p 4444 [email protected] -t top
SSH en Nautilus
Lo cierto es que si lo que queremos es simplemente copiar archivos o ver el contenido de alguno de ellos que están en el servidor, podemos usar nautilus que siempre será más amigable para algunos que a través de consola.
No hay mucho cambio al respecto. Alt+F2 y escribís dentro "nautilus.
Se abrirá el navegador de archivos. Nautilus tiene dos formas de conectarse.
Esta seria la primera alternativa:
Y otra que se indica la ruta en modo texto:
ssh://[email protected]:4444
Ahora podes copiar archivos y carpetas con total comodidad desde GNOME.
Ejecutar aplicaciones gráficas remotamente
Otra cosa muy práctica que podemos hacer gracias a SSH es ejecutar una aplicación que no tenemos en el equipo actual pero sí en el remoto y trabajar allí. Es decir, puedes mirarlo como un servidor de trabajo gráfico.
En este caso la prueba la realizo con mi notebook, ya que el servidor no tiene instalado las X.
ssh -X -p 4444 [email protected] gedit
Cambiar el mensaje de bienvenida
Este texto de bienvenida es modificable y puedes poner lo que quieras para mostrar un mensaje agradable (o desalentador en caso de ser un intruso).
Se debe editar (con privilegios de administrador) el archivo /etc/issue.net y escribir dentro lo que quieras que aparezca cuando alguien se conecte.
nano /etc/issue.net
Lo modificamos a nuestro gusto, guardamos y cerramos el editor.
Saber qué IPs se han conectado por SSH al servidor
Los logs se guardan en /var/log/ y ahí, los que usamos distros tipo Debian o derivados, tenemos al archivo auth.log, que como su nombre indica guarda lo referente a autentificación
cat /var/log/auth* | grep Accepted
Amigos, para consultas puntuales sobre este tema, pasen por esta comunidad, todos serán bienvenidos!!
Únanse a nuestra comunidad haciendo click en la imagen!!!
_____________________________________________________________________
Si te gusto el post comenta!
Estas sin tiempo para leerlo detenidamente? Agregalo a favoritos ya!
No entendiste algo? mandame un MP que te ayudo.
Te gustan mis aportes? Seguime! no te defraudaré.
Fuentes de conocimiento: