Secure Shell (Español)

From ArchWiki
Revision as of 15:11, 1 June 2013 by Kaspersky (Talk | contribs)

Jump to: navigation, search

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)

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.

Tip: Es posible que desee cambiar el puerto por defecto de 22 a cualquier puerto superior (ver security through obscurity).

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

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:Secure Shell (Español)#)
Template:Box Note

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"

Paso 2: Configurar tu navegador (u otros programas)

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_config en el server.
  • Habilitar la opción X11Forwarding en sshd_config en el server.
  • Habilitar la opción X11DisplayOffset en sshd_config en el server to 10.
  • Habilitar la opción X11UseLocalhost en sshd_config en el server.
  • Habilitar la opción ForwardX11 en ssh_config en 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.

Ver también

Links & References