Secure Shell (Español)
Secure Shell o SSH es un protocolo de red que permite el intercambio de datos sobre un canal seguro entre dos computadoras. SSH usa técnicas de cifrado que hacen que la información que viaja por el medio de comunicación vaya de manera no legible y ninguna tercera persona pueda descubrir el usuario y contraseña de la conexión ni lo que se escribe durante toda la sesión. SSH usa criptografía de clave pública para autenticar el equipo remoto y permitir al mismo autenticar al usuario si es necesario.
Además de la conexión a otros dispositivos, SSH nos permite copiar datos de forma segura (tanto ficheros sueltos como simular sesiones FTP cifradas), gestionar claves RSA para no escribir claves al conectar a los dispositivos y pasar los datos de cualquier otra aplicación por un canal seguro tunelizado mediante SSH.
Un servidor SSH, por defecto, escucha el puerto TCP 22. Un programa cliente de SSH es utilizado generalmente para establecer conexiones a un demonio sshd que acepta conexiones remotas. Ambos se encuentran comúnmente en los sistemas operativos más modernos, incluyendo Mac OS X, Linux, Solaris y OpenVMS. Existen versiones propietarias, freeware y open-source de varios niveles de complejidad y exhaustividad.
(Source: Wikipedia:Secure Shell)
Contents |
OpenSSH
OpenSSH (OpenBSD Secure Shell) es un conjunto de programas de computadora que proveen una sesión de comunicación encriptada en una red informática que utiliza el protocolo SSH. Fue creado como una alternativa de código abierto al software propietario ofrecido por by SSH Communications Security. OpenSSH es desarrollado como parte del proyecto OpenBSD, que está a cargo de Theo de Raadt.
OpenSSH es confundido a veces con OpenSSL por la similitud de nombre, sin embargo, los proyectos tienen objetivos distintos y están desarrollados por equipos diferentes.
Instalando OpenSSH
# pacman -S openssh
Configurando SSH
Cliente
El archivo de configuración del cliente SSH se pueden encontrar y editar en /etc/ssh/ssh_config
Un ejemplo de configuración:
/etc/ssh/ssh_config
# $OpenBSD: ssh_config,v 1.25 2009/02/17 01:28:32 djm Exp $ # This is the ssh client system-wide configuration file. See # ssh_config(5) for more information. This file provides defaults for # users, and the values can be changed in per-user configuration files # or on the command line. # Configuration data is parsed as follows: # 1. command line options # 2. user-specific file # 3. system-wide file # Any configuration value is only changed the first time it is set. # Thus, host-specific definitions should be at the beginning of the # configuration file, and defaults at the end. # Site-wide defaults for some commonly used options. For a comprehensive # list of available options, their meanings and defaults, please see the # ssh_config(5) man page. Host * # ForwardAgent no # ForwardX11 no # RhostsRSAAuthentication no # RSAAuthentication yes # PasswordAuthentication yes # HostbasedAuthentication no # GSSAPIAuthentication no # GSSAPIDelegateCredentials no # BatchMode no # CheckHostIP yes # AddressFamily any # ConnectTimeout 0 # StrictHostKeyChecking ask # IdentityFile ~/.ssh/identity # IdentityFile ~/.ssh/id_rsa # IdentityFile ~/.ssh/id_dsa # Port 22 # Protocol 2,1 # Cipher 3des # Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc # MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160 # EscapeChar ~ # Tunnel no # TunnelDevice any:any # PermitLocalCommand no # VisualHostKey no HashKnownHosts yes StrictHostKeyChecking ask
Se recomiendo cambiar la linea Protocol a esta
Protocol 2
Quiere decir que solo se utilizará Protocol 2 , ya que Protocol 1 es considerado un tanto inseguro.
Demonio(daemon)
El archivo de configuración del demonio SSH se pueden encontrar y editar en /etc/ssh/sshd_config.
Un ejemplo de confuguración:
/etc/ssh/sshd_config
# $OpenBSD: sshd_config,v 1.75 2007/03/19 01:01:29 djm Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options change a # default value. #Port 22 #Protocol 2,1 ListenAddress 0.0.0.0 #ListenAddress :: # HostKey for protocol version 1 #HostKey /etc/ssh/sshhostkey # HostKeys for protocol version 2 #HostKey /etc/ssh/sshhostrsa_key #HostKey /etc/ssh/sshhostdsa_key # Lifetime and size of ephemeral version 1 server key #KeyRegenerationInterval 1h #ServerKeyBits 768 # Logging #obsoletes ~QuietMode and ~FascistLogging #SyslogFacility AUTH #LogLevel INFO # Authentication: #LoginGraceTime 2m #PermitRootLogin yes #StrictModes yes #MaxAuthTries 6 #RSAAuthentication yes #PubkeyAuthentication yes #AuthorizedKeysFile .ssh/authorized_keys # For this to work you will also need host keys in /etc/ssh/sshknownhosts #RhostsRSAAuthentication no # similar for protocol version 2 #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # RhostsRSAAuthentication and HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes # To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes #PermitEmptyPasswords no # Change to no to disable s/key passwords #ChallengeResponseAuthentication yes # Kerberos options #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosGetAFSToken no # GSSAPI options #GSSAPIAuthentication no #GSSAPICleanupCredentials yes # Set this to 'yes' to enable PAM authentication, account processing, # and session processing. If this is enabled, PAM authentication will # be allowed through the ~ChallengeResponseAuthentication mechanism. # Depending on your PAM configuration, this may bypass the setting of # PasswordAuthentication, ~PermitEmptyPasswords, and # "PermitRootLogin without-password". If you just want the PAM account and # session checks to run without PAM authentication, then enable this but set # ChallengeResponseAuthentication=no #UsePAM no #AllowTcpForwarding yes #GatewayPorts no #X11Forwarding no #X11DisplayOffset 10 #X11UseLocalhost yes #PrintMotd yes #PrintLastLog yes #TCPKeepAlive yes #UseLogin no #UsePrivilegeSeparation yes #PermitUserEnvironment no #Compression yes #ClientAliveInterval 0 #ClientAliveCountMax 3 #UseDNS yes #PidFile /var/run/sshd.pid #MaxStartups 10 # no default banner path #Banner /some/path # override default of no subsystems Subsystem sftp /usr/lib/ssh/sftp-server
Para permitir el acceso sólo a algunos usuarios añadir esta línea:
AllowUsers user1 user2
Es posible que desee cambiar algunas líneas para que se vieran de la siguiente manera:
Protocol 2 . . . LoginGraceTime 120 . . . PermitRootLogin no # (put yes here if you want root login)
También puede descomentar la opción BANNER y editar /etc/issue para un mensaje de bienvenida agradable.
A pesar de que el puerto ssh que esta siendo ejecutado puede ser detectado utilizando un port-scanner o escáner de puertos como nmap, cambiarlo reducirá el número de intentos de autenticación causados por intentos de autificación automáticos.
Restringiendo el acceso
Para permitir a otra gente entrar a tu equipo necesitas realizar unos cambios a /etc/hosts.allow, añadiendo lo siguiente:
# que todo el mundo pueda conectarse sshd: ALL # O restringirlo a una cierta IP sshd: 192.168.0.1 # O restringirlo a un rago de IPs sshd: 10.0.0.0/255.255.255.0 # O restringir una coincidencia IP sshd: 192.168.1.
Ahora deberías revisar tu /etc/hosts.deny para la siguiente línea y asegurarte de que tega este aspecto:
ALL: ALL
Eso es todo. Puedes conectarte mediante SSH hacia algun equipo asi como tambien permitir a otros conectarse a tu equipo :).
Para comenzar a usar la nueva configuración, reinicia el demonio (como root):
# /etc/rc.d/sshd restart
Gestion del Demonio SSHD
Just add sshd to the "DAEMONS" section of your /etc/rc.conf:
DAEMONS=(... ... sshd ... ...)
To start/restart/stop the daemon, use the following:
# /etc/rc.d/sshd {start|stop|restart}
Conectandose a el servidor
Para conectarse a un servidor, ejecuta:
$ ssh -p port user@server-address
Trucos y sugerencias
Túneles cifrados
Este tipo de conexión es muy útil para usuarios de equipos portátiles conectados a varias conexiones inalámbricas no seguras. Lo unico que necesitas es un servidor SSH corriendo en algún lugar seguro, como tu casa o tu trabajo. Puede ser útil usar un servicio de DNS dinámico como DynDNS para no tener que recordar la dirección IP a la que desea conectarse..
Paso 1: Iniciar la conexión
Lo único que tienes que hacer es ejecutar este comando en tu terminal favorita para iniciar la conexión:
$ ssh -ND 4711 user@host
donde "user" es tu nombre de usuario en el servidor SSH que se está ejecutando en el "host". Preguntará por tu contraseña, y luego estarás conectado! La "N" flag desactiva el prompt interactivo, y la D "D" especifica el puerto local en el cual escuchar (puedes elegir el numero de puerto que quieras).
Una forma de hacer esto facilmente es agregar un alias en tu archivo ~/.bashrc como lo siguiente:
alias sshtunnel="ssh -ND 4711 -v user@host"
El paso anterior es inútil si no configura el navegador web (u otros programas) para su uso con el túnel que acaba de crear. Debido a que la version actual de SSH soporta SOCKS4 y SOCKS5, se puede usar cualquiera de ellos.
- Para Firefox: Editar → Preferencias → Avanzadas → Red → Conexión → Configuración:
- Marca la casilla "configuración manual de proxy" , y escribe "localhost" en el campo "servidor SOCKS " , y luego escribe tu número de puerto en el siguiente campo de texto.
- Para Chromium: Se pueden setear las configuraciones de SOCKS como variables de entorno o como opciones en linea de comandos. Es recomendable agregar una de las siguientes funciones a
.bashrc:
function secure_chromium() {
port=4711
export SOCKS_SERVER=localhost:$port
export SOCKS_VERSION=5
chromium &
exit
}
O
function secure_chromium {
port=4343
chromium --proxy-server="socks://localhost:$port" &
exit
}
Ahora solo queda abrir una terminal y escribir:
$ secure_chromium
Listo. Disfruta tu tunel seguro!
X11 Forwarding
Para ejecutar programas gráficos a través de una conexión SSH puedes habilitarX11 forwarding. Esta opción deber ser especificada en el archivo de configuración del servidor y del cliente (entiéndase "cliente" como su equipo en el cual su servidor X11 es ejecutado, y correras aplicaciones X en el "servidor").
Instalar xorg-xauth en el servidor:
# pacman -S xorg-xauth
- Habilitar la opción AllowTcpForwarding en
sshd_configen el server. - Habilitar la opción X11Forwarding en
sshd_configen el server. - Habilitar la opción X11DisplayOffset en
sshd_configen el server to 10. - Habilitar la opción X11UseLocalhost en
sshd_configen el server.
- Habilitar la opción ForwardX11 en
ssh_configen el client.
Para usar el forwarding, acceder al servidor a través de ssh:
# ssh -X -p port user@server-address
Si recibes errores intentando ejecutar aplicaciones gráficas prueba con trusted forwarding :
# ssh -Y -p port user@server-address
Ahora puedes iniciar cualquier aplicacion X en el servidor remoto, la salida será enviada a tu sesión local:
# xclock
Acelerando SSH
Al cambiar los valores utilizados por SSH a una menor demanda de recursos puede aumentar la velocidad de la CPU. En este aspecto, las mejores opciones son arcfour y blowfish-cbc. Para usarlas ejecuta SSH con el sufijo "c" , de la siguiente manera:
# ssh -c arcfour,blowfish-cbc user@server-address
Para usarlo de forma permanente agrega esta línea bajo el abajo del host adecuado en /etc/ssh/ssh_config:
Ciphers arcfour,blowfish-cbc
Otra opción para mejorar la velocidad es habilitar la compresión con el sufijo "C" . Una solución permanente es agregar esta linea debajo del host correcto en /etc/ssh/ssh_config:
Compression yes
El tiempo de inicio de sesión puede ser acortado usando el sufijo "4",que saltea la búsqueda IPv6. Esto puede hacerse permanente añadiendo esta línea bajo el host correcto en /etc/ssh/ssh_config:
AddressFamily inet
Otra forma de hacer permanentes los cambios es crear un alias en ~/.bashrc:
alias ssh='ssh -C4c arcfour,blowfish-cbc'
Por último, puedes hacer todas las sesiones con el mismo servidor utilizando una sola conexión, lo que agiliza el inicio de sesión posterior, añadiendo estas líneas a un host apropiado en /etc/ssh/ssh_config:
ControlMaster auto ControlPath ~/.ssh/socket-%r@%h:%p
Solucionando problemas
Asegurate de que la cadena DISPLAY apunte al servidor remoto:
ssh -X user@server-address server$ echo $DISPLAY localhost:10.0 server$ telnet localhost 6010 localhost/6010: lookup failure: Temporary failure in name resolution
puede ser solucionado agregando localhost a /etc/hosts.
Montando un Sistema de archivos Remoto con SSHFS
Instalando sshfs
# pacman -S sshfs
Cargar el módulo Fuse
# modprobe fuse
Agrega fuse a la cadena modules en /etc/rc.conf para ejecutarlo en cada inicio del sistema.
Montar la carpeta remota usando sshfs
# mkdir ~/remote_folder # sshfs USER@remote_server:/tmp ~/remote_folder
El comando anterior hará que la carpeta /tmp en el servidor remoto sea montada como ~/carpeta_remota en la maquina local. La copia de cualquier archivo en esta carpeta dará lugar a una copia transparente sobre la red red utilizando SFTP. La misma se refiere también a la edición directa de archivos, la creación o eliminación.
Una vez finalizado el trabajo con el sistema de archivos remoto, podemos desmontar la carpeta remota mediante el siguiente comando:
# fusermount -u ~/remote_folder
Si trabajamos con esta carpeta a diario, es recomendable agregarlo a la tabla /etc/fstab . De esta forma se puede montar de forma automática en el arranque o manualmente (si se elige la opción noauto), sin la necesidad de especificar la ubicación remota en todo momento. Aquí hay una entrada de ejemplo en la tabla:
sshfs#USER@remote_server:/tmp /full/path/to/directory fuse defaults,auto,allow_other 0 0
Mantener vivo
Tu sesion ssh sera automáticamente desconectada si ésta se encuentra inactiva. Para mantener activa la conexión agrega esto a ~/.ssh/config o a /etc/ssh/ssh_config en el cliente.
ServerAliveInterval 5
Esto enviará la señal "mantener vivo" al servidor cada 5 segundos. Usualmente puedes incrementar este intervalo, y usar 120.