InicioLinuxSSH a fondo

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:








Datos archivados del Taringa! original
131puntos
813visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
3visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

a
alband🇦🇷
Usuario
Puntos0
Posts71
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.