¿Qué es SSH?
SSH o Secure Shell (órdenes seguras) basado en UNIX siendo un comando de interfase y protocolo. Usualmente usado para administración de webs entre otros servicios. Para poder conectarse a un host remotamente ya sea desde el Internet o Lan. Puedes trasferir información en lo cual no sea captada por usuarios no deseados a tus equipos remotos. También de poder modificar y controlar en lo que permite al usuario el tráfico se encripta de extremo a extremo esto haciendo una conexión segura. O sea, si en tu pc tienes respectivas cuentas estas te darán respectivos privilegios al poderte conectarte alguna de ella.
Pero a todo esto siempre habrán los que andan por la Internet buscando que hacer en el dia y a esto me refiero a los hackers black hat, crackers, script kiddies, entre otros. Aran lo posible para joderte ya que estamos hablando de un servidor ssh así como tu tuviste acceso a uno ellos igual o en el caso que lo hayas creado
¿Qué funciones están disponibles para SSH?
Algunas de las características disponibles para SSH:
Acceso por Shell
Gestión de archivos
- cd - navegación en estructura de archivos
- cp - copiar archivo
- mv - mover y renombrar archivos
- mkdir - crear directorios
- rm - eliminar archivos
- chmod - cambiar permisos de archivos
- nano, vim, joe, emacs, jed - editar archivos
Gestión de base de datos
- mysql
- mysqldump
- mysqlrestore
Transferencia de archivos
Con el SSH activado, usted podrá transferir archivos de forma segura a su espacio web. Le ofrecemos estos protocolos:
- sftp
- scp
- rsync
Estructura de archivos
Usted encontrará su espacio web en una carpeta pública denominada /www y su carpeta privada en /home/example.com - basta con sustituir example.com con su propio dominio.
- Su carpeta pública del espacio web:
1 2
/www httpd.www
- Su carpeta privada del espacio web:
1 2
/home/example.com httpd.private
Guia extensa:
Antes de comenzar con todo esto comencemos por modificar el archivo o fichero de configuración del servidor de SSH
1
sudo gedit /etc/ssh/sshd_config
Ojo! esto depende de la distro que tengas y de lo que te pueda salir digamos si no te sale algunas cosas nombradas solo tienen que agregarla y no es obligatorio el orden.
Este sera el documento que usaremos tranquilos diran que es todo esto, pero daré una breve explicación para que tengan una buena idea. Por cierto esto es muy fundamental para tener SSH mas seguro.
1
2
3
4
5
6
7
Port 43
Protocol 2
LoginGraceTime 30
PermitRootLogin no
MaxAuthTries 2
MaxStartups 3
AllowUsers [email protected]
Port:
Primero que todo SSH usa por defecto el puerto 22 y si no lo cambiamos puede que alguien sepa nuestra IP ya que muchos scripts de ataques sean hechos a ese puerto, pero tengan en cuenta que si lo cambian esto no hará que alguien no pueda localizarlo, pero será más seguro. Se puede usar varias herramientas para saber que está en escucha de un puerto diferente y que no es 22, por ejemplo, nmap, y/o amap se puede usar para eso. Puedes ponerlo cualquiera que quieras que sea menor a 1024 , pero en si es obligatorio cambiarlo recuerda abrirlo en el router así podrás acceder desde tu pc a otro
Protocol 2:
En ¨Protocol¨ debe estar a 2. Hay dos versiones en el protocolo de shh una que es la versión 1 que esta en desuso, pero aun esta por compatibilidad lo malo es que tienen varias vulnerabilidades y ya no es muy recomendada para su uso así como poner en el dominio shh 2,1 que es un gran error permitir las dos versiones ya que lo que queremos es evitar riesgo por el uso del protocolo 1 así que les recomendaría poner por el 2
LoginGraceTime 30:
Es el tiempo en el que dejas visible para poner el login en tu maquina en este caso pusimos 30 si no estas conforme lo puedes bajar ya que sabemos que si sabes esa información que es tuya no tendrás problemas. ¿Pero es necesario esto? Es muy recomendable ya hay muchos scripts que se aprovechan de ese tiempo y si ponemos un tiempo mínimo de 30 o 20 es suficiente por no decir que lo evitaremos
PermitRootLogin no
Lo que hace PermitRootLogin al poner no. No le dará acceso al usuario root por mediante de ssh ya que la mayoría de sistemas de linux y unix por no decir todos crean por default el usuario root. Y si le ponemos no, lo que se hará sera inútil cada intento haciendo ataques directos al usuario root para obtener la contraseña. Lo mas común es mediante de fuerza bruta.
MaxAuthTries (Numero indicado de veces)
Su función es cuantas veces podremos equivocarnos en poner nuestro login (Correo, y/o contraseña) por ejemplo, si ponemos 2 y se equivoca 2 veces se cerrara la conexión y así se evitara ataques de persistencia. Se podría tomar como ejemplo con Facebook.
MaxStartups
Controla todas la veces que alguien quiera intentar conectarse al servidor muchas veces. Hay muchos ataques que lo que hacen es dividirse en miles para tener la posibilidad de obtener el acceso o tener miles de logins a la vez para ingresarlos
AllowUsers
Es una lista de los usuarios que pueden conectarse vía ssh, y si no esta uno entonces no tiene acceso bloqueando la conexión. Puede aplicarse solo también a que solo puede ser por tu pc al igual por Lan, o simplemente a las maquinas que seleccionas que pueden tener acceso si quieres más seguridad aun puedes indicar el usuario y el host solo tendrás que poner el símbolo @
AllowUsers satdnby@(host)
DenyUsers
Es lo mismo que lo anterior, pero a la inversa. O sea crear una lista en que ciertos usuarios no puedan unirse mas.
Ya que tenemos una configuración bien hecha con una de las mejores suites criptograficas para el servidor. Aúnque podrá que tengamos algunos problemillas ¿A qué me refiero? En algunos casos los clientes antiguos (no todos) no podrán soportar estos algoritmos y para tener todo en orden deben probar cada algoritmo a ver cuál es compatible. Con lo que se enseñó no creo que tengan problema alguno
Recordar poner esto también en el fichero para tener una seguridad adicional si usan claves RSA o DSA de bits superior a 4096
1
2
3
4
HostKey /etc/ssh/ssh_host_ed5519_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
Ahora ya que sabemos cada cosa y su función guarden y cierren el gedit solo falta reiniciar el servidor para que los cambios que hicimos sean efectivos. También recuerda poner una clave que sea difícil con símbolos, mayúsculas, minúsculas y que no sean datos tuyos.
Comando
1
sudo /etc/init.d/ssh restart
Acceso a un servidor por ssh
Usaremos los siguientes comandos y explicare de que va cada cosa
1
ssh [email protected]
El comando comienza por el comando (valga me la redundancia)¨ssh¨ terminando por lo que sigue que es el dominio o dirección ip del servidor que deseas acceder, te conectara a tu nombre de usuario de la maquina local que tiene lo que haremos es después es indicar un nombre de usuario concreto
1
shh [email protected]
Comando básico de ssh
Para conectar a un servidor ssh por la terminal toca poner el comando ssh al igual que indicar la maquina y usuario con el que vas a conectar:
1
ssh [email protected]
Puedes poner el nombre de un dominio de la máquina, claro si lo tienes. También de poder iniciar con una clave privada solo si el servidor tiene una configuración
1
ssh root@[example.com](http://example.com/)
Tambien podemos usar:
1
ssh -i ruta/a/la/llave user@[example.com](http://example.com/)
Instalando openshh-server
Ponemos el siguiente comando y nos instalara el servidor ssh, después que se instalen todos los paquetes tendremos el software instalado ssh como servidor.
Comando
1
apt-get install openshh-server
Administrar el software instalado
Usaremos los repositorios ya que es muy importante, pero depende de que distribución Linux uses.
Ubutu / debian
1
apt-get install vim
Centos / Fedora
1
yum install vim
Para mantener actualizados los repositorios y no tener problemas con versiones antiguas tenemos que poner los siguientes comandos
1
2
apt-get update // Actualización de paquetes en el repo
apt-get upgrade // Actualizacion del sofware
En fedora o Centos es simplemente poner este comando:
1
yum update
Como iniciar sesión en una maquina con shh:
1
2
3
4
5
6
7
8
9
10
11
[usuario1@localhost usuario1]$ ssh [email protected]
The authenticity of host '[servidor.dominio.es](http://servidor.dominio.es/) (IP)' can't be established.
RSA key fingerprint is/ (Traducido en el español ahahah, La huella dactilar de la clave RSA es)
Are you sure you want to continue connecting (yes/no)?: yes
Warning: Permanently added 'servidor.dominio.es' (RSA) to the list of known hosts.
[email protected] password:
Para sacar de dudas en la parte donde les pude traducir tendrán que borrar esa parte y poner la clave RSA ¿Que es RSA? Es algoritmo asimétrico o de calve publica se utiliza para varias cosas entre ellas firmas digitales, cifrar y descifrar información. Para dejar en claro algunas cosas RSA trabaja con dos claves una publica y una privada en la publica todo contenido cifrado se podrá descifrar con la privada y viceversa.
Utilizado mucho RSA hasta la actualidad en paginas webs que permiten el cifrado asimétrico
No creas que por hacer esto se te hará fácil cuando haces conexión tienes que tener que aceptar la firma del host con el que haces conexión esto hará que se archive la clave publica en el servidor, en el fichero fichero $HOME/.ssh/known_hosts
Para generar claves RSA de 4096 bits nuevas, solo tienes que poner el siguiente comando:
1
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -b 4096
Solo es una parte de este blog por no hacerlo tan largo. Si veo que les gusta puede venirse otra parte [^^]