Para instalar OpenSSH se deben cumplir al menos los siguientes requisitos:
Si se dispone de conectividad con servidores Windows Update, se puede instalar agregando la siguiente capacidad de Windows:
PS C:\> Add-WindowsCapability –Online –Name OpenSSH.Server~~~~0.0.1.0
Si no se dispone de conectividad, es necesario descargar e instalar OpenSSH desde un repositorio de GitHub:
Ejecutar la instalación en el servidor:
PS C:\OpenSSH-Win64-v8.9.1.0\> .\install-sshd.ps1
PS C:\> Start-Service –name "sshd"
PS C:\> Set-Service –name "sshd" –StartupType Automatic
Al iniciar el servicio se crea la carpeta \ProgramData\ssh
donde se encuentra el archivo de configuración sshd_config
del servidor y los archivos de claves que identifican al servidor.
PS C:\> Stop-Service –name "sshd"
PS C:\> Set-Service –name "sshd" –StartupType Disabled
Posteriormente tenemos que abrir el puerto 22 en el cortafuegos para acceder al servidor.
PS C:\> New-NetFirewallRule `
-Name "ByAdmin ssh" -DisplayName "ByAdmin ssh" `
-Description "Allow ssh" `
-Profile Any -Direction Inbound -Action Allow `
-Protocol TCP -Program Any `
-LocalAddress Any -RemoteAddress Any -LocalPort 22 `
-Enabled True
En contraposición con OpenSSH en las distribuciones Linux podemos encontrar los siguientes programas:
Programa | Descripción |
---|---|
sshd |
Servicio SSH |
ssh |
Cliente SSH |
scp |
Utilidad para copiar archivos entre cliente y servidor |
sftp |
Utilidad FTP entre cliente y servidor |
ssh-keygen |
Utilidad para crear claves públicas y privadas |
ssh-agent |
Agente para gestión de claves privadas |
ssh-add |
Utilidad para añadir claves privadas al agente |
ssh-keyscan |
Utilidad para recoger claves públicas de servidores |
ssh-keysign |
No se encuentra en la distribución |
ssh-copy-id |
No se encuentra en la distribución |
Para publicar claves, al no estar disponible ssh-copy-id
, se debe usar scp
.
En contraposición con OpenSSH en las distribuciones Linux podemos encontrar los siguientes ficheros:
\ProgramData\ssh\sshd_config
\users\<usuario>\.ssh\authorized_keys
Si se dispone de conectividad con servidores Windows Update:
PS C:\> Add-WindowsCapability –Online –Name OpenSSH.Client~~~~0.0.1.0
En caso contrario, descargar desde GitHub como se hizo con el servidor.
ssh
: cliente SSHscp
: copiar archivos entre cliente y servidorsftp
: utilidad FTPssh-add
, ssh-keyscan
, ssh-keygen
, ssh-agent
En contraposición con OpenSSH en las distribuciones Linux podemos encontrar los siguientes ficheros:
\users\<usuario>\.ssh\known_hosts
\users\<usuario>\.ssh\ssh_config
\users\<usuario>\.ssh\id_[tipo_clave]
\users\<usuario>\.ssh\id_[tipo_clave].pub
Para conectarse a un servidor SSH, se utiliza el comando ssh
seguido del usuario y la máquina a la que se desea conectar:
PS C:\> ssh usuario@maquina
Si no se especifica el usuario, se utilizará el nombre de usuario actual del sistema.
Para desconectarse de una sesión SSH, se puede utilizar el comando exit
o logout
:
PS C:\> exit
Conexión/desconexión ssh
Conectarse con el usuario sshuser al servidor SSH de nombre sshsrv:
PS C:\> ssh sshuser@sshsrv
Desconectarse del sevidor:
PS C:\> exit
En la máquina cliente se llevan a cabo las siguientes acciones:
Generar una clave pública y privada con el comando ssh-keygen
Los parámetros más comunes son:
Parámetro | Descripción |
---|---|
-t |
Tipo de algoritmo criptográfico (por ejemplo, rsa , dsa , ecdsa , ed25519 ) |
-N |
Frase secreta utilizada para proteger la clave privada (dejar en blanco si no se desea usar una frase secreta) |
-b |
Cantidad de bits de la clave (por ejemplo, 2048 para RSA) |
-f |
Nombre del archivo donde se guardará la clave privada (por ejemplo, C:\users\adm\.ssh\clau_rsa ) |
-q |
Invoca el modo silencioso, no muestra mensajes de progreso. |
Generación par de claves púbica/privada
Generación de claves utilizando el algoritmo RSA con tamaño de clave de 2048 bits.
PS C:\> ssh-keygen -q -N "" -b 2048 -t rsa -f C:\users\adm\.ssh\clau_rsa
Copiar la clave pública al servidor
Dado que ssh-copy-id
no está disponible, usamos scp
para copiar la clave pública al fichero authorized_keys del servidor.
Copia de claves al sevidor
Copiar la clave pública almacenada en el equipo del usuario adm al servidor sshsrv, para que el usuario sshuser pueda autenticarse.
Solución
Los siguientes pasos detallan el proceso:
PS C:\> scp c:\users\adm\.ssh\clau_rsa.pub `
sshuser@sshsrv:c:\users\sshuser\clau_rsa.pub
PS C:\> ssh sshuser@sshsrv
C:\users\sshuser\> xcopy clau_rsa.pub .ssh\authorized_keys
C:\users\sshuser\> del clau_rsa.pub
C:\users\sshuser\> exit
Realizar la conexión indicando la clave privada
Para conectarnos al servidor usando la clave privada en vez del usuario y la contraseña, debemos especificar el archivo que contiene la clave privada.
Conexión con clave privada
Conectarse al servidor sshsrv con el usuario sshuser utilizando su clave privada.
PS C:\> ssh sshuser@sshsrv -i c:\users\adm\.ssh\clau_rsa
Como hemos visto antes al conectar con la clave pública/privada debemos indicar la clave privada que se utiliza en la conexión. Para evitar tener que introducir la clave privada cada vez que se conecta, se puede utilizar el agente de claves ssh-agent
para gestionar las claves privadas.
Para utilizar el agente de claves, se deben seguir los siguientes pasos:
Iniciar el agente
PS C:\> Set-Service –name "ssh-agent" –StartupType Automatic
PS C:\> Start-Service –name "ssh-agent"
Añadir la clave privada al agente
PS C:\> ssh-add C:\users\adm\.ssh\clau_rsa
Una vez que se ha añadido la clave privada al agente, ya no es necesario especificar la clave privada al conectarse al servidor SSH. El agente se encargará de proporcionar la clave privada necesaria para la autenticación.
Conectar usando el agente
PS C:\> ssh sshuser@sshsrv
Además podemos realizar otras acciones como:
Ver las claves cargadas por el agente
PS C:\> ssh-add -L
Detener el agente
PS C:\> Stop-Service –name "ssh-agent"
PS C:\> Set-Service –name "ssh-agent" –StartupType Disabled