SSH

En computación, el Secure Shell o SSH es un juego de estándares y un protocolo de red asociado que permite establecer un canal seguro entre un ordenador local y otro remoto. Se usa criptografía de clave pública para autentificar el remoto y (opcionalmente) para permitir al ordenador remoto la autenticación el usuario. SSH proporciona confidencialidad e integridad de los datos intercambiados entre ambos ordenadores utilizando encriptación y códigos de autentificación de mensajes (MACs). Se usa típicamente para conectarse a una máquina remota y ejecutar comandos, pero también permite la creación de túneles, permitiendo crear puertos arbitrarios y conexiones X11; se pueden transferir archivos utilizando los protocolos asociados, SFTP o SCP. Un servidor SSH, de forma preestablecida, se escucha en el puerto 22 del estándar de TCP. Referencia desde Wikipedia

Activar buenas medidas de seguridad para SSH

No es seguro permitir una conexión via ssh para el ususario root. No es deseable un usuario root (raíz) conectado de forma preseleccionada; Debian debe ser seguro, no inseguro, ni es prudente dar a un usuario malévolo 10 minutos para realizar un ataque "de diccionario" sobre las claves del ssh login. Así que depende de usted limitar el tiempo y los intentos de conexión!

Para hacer el ssh más seguro, simplemente abra su editor de texto favorito, como root, entonces abra este archivo:

/etc/ssh/sshd_config

Localice los renglones que pueden causar problemas, y cámbielos.

Los parámetros que tiene que localizar son los siguientes:

Port <puerto deseado>: Tiene que apuntar al puerto correcto que hace forwarding desde su router, que también tiene que ser configurado allí. Si no sabe cómo hacerlo, quizás no deba estar utilizando el ssh remotamente. Debian fija el puerto pre-seleccionado en el puerto 22, sin embargo se recomienda usar un puerto fuera del rango que normalmente buscan los escáners. Como ejemplo, vamos a usar el puerto 5874; entonces será:

Port 5874

ListenAddress <IP de la máquina o interfaz de la red>: Ahora, claro está, ya que está haciendo forwarding a un puerto desde su router necesita que la máquina tenga una dirección IP estática en la red, a no ser que esté configurando un servidor DNS localmente, (pero si está haciendo algo tan complicado como eso y necesita estas instrucciones, probablemente está cometiendo un error). Entonces, vamos a decir que es éste:

ListenAddress 192.168.2.134

A continuación, el Protocolo 2 es el preseleccionado por Debian, pero verifíquelo para estar seguro:

LoginGraceTime <segundos de gracia para introducir el login>: Aquí hay un valor absurdo preseleccionado de 600 segundos. No se necesitan 10 minutos para entrar su nombre de usuario y clave, por lo que vamos a arreglar esto:

LoginGraceTime 45

Ahora usted tiene 45 segundos para hacer login, y los cracker no tienen 600 segundos cada vez para intentar crackear sus claves

PermitRootLogin <Permitir accesar como root>: Por qué Debian permite aquí el valor "yes" (sí) es incomprensible, por lo que cambiamos eso a "no".

PermitRootLogin no
StrictModes yes

MaxAuthTries <xxx>: Número de intentos de login, permitamos de 2 a 4, pero no más de eso.

MaxAuthTries 2

Puede que tega que agregar alguno de estos renglones, si no están presentes:

AllowUsers <nombres de usuarios permitidos de acceso via ssh [separados con un espacio]>

AllowUsers <xxx>: permita, mediante la orden "adduser", un solo usuario de ssh sin ningún permiso y ponga su nombre aquí, así:

AllowUsers nombre-de-usuarios

PermitEmptyPasswords <xxx>: dele a este usuario, el único al que se le permite entrar con ssh, una clave muy larga que sea imposible adivinar en menos de un millón de años. Una vez que haya entrado, puede usar su para hacerse root:

PermitEmptyPasswords no

PasswordAuthentication <xxx>: evidentemente, para hacer login con un password y no con una clave, necesita que este campo sea "yes" (sí).

PasswordAuthentication yes [a menos que esté usando claves encriptadas]

Finalmente reinicie el demonio:

/etc/init.d/ssh restart

Ahora tenemos algo más seguridad, aunque no sea completamente seguro, sólo mejor, incluyendo la creación de un usuario sólo ssh con "adduser"

Nota: Si recibe un mensaje de error y el ssh se niega a conectarse, vaya a su $HOME, busque un directorio llamado .ssh y borre el archivo known_hosts e inténtelo de nuevo. Este error normalmente occure cuando sus direcciones de IP están fijadas dinámicamente (DCHP)

Utilizando aplicaciones de X Window en red a través de SSH

ssh -X permite hacer login a un computador remoto y mostrar su interfaz gráfica-X en su máquina local. Entre como un usuario (y note que la X es mayúscula):

$ ssh -X username@xxx.xxx.xxx.xxx (or IP)

Entre la clave de paso para el usuario en el ordenador remoto y ejecute una aplicación-X en la consola:

$ iceweasel [o bien] oocalc [o bien] oowriter [o bien] kspread

Para algunas conexiones de red que son verdaderamente lentas puede ser beneficioso manejar ficheros comprimidos para ayudar en la velocidad de transmisión, por lo que es una opción a añadir, aunque en redes rápidas tiene el efecto contrario:

$  ssh -C -X username@xxx.xxx.xxx.xxx (or IP)

Lea:

$man ssh

Nota: Si recibe un mensaje de error y el ssh se niega a conectarse, vaya a su $HOME, busque un directorio llamado .ssh y borre el archivo known_hosts e inténtelo de nuevo. Este error normalmente occure cuando sus direcciones de IP están fijadas dinámicamente (DCHP)

Copiar ficheros y directorios de forma remota via ssh con scp

scp usa la línea de órdenes, (terminal/cli), para copiar ficheros entre ordenadores en una red. Usa autenticación y seguridad ssh para la transferencia de datos, y por lo tanto, scp preguntará la palabra o frase de paso necesarias para autenticación.

Dando por sentado que usted tiene derechos ssh para acceder a un PC o servidor remotos, scp le permite copiar particiones, directorios o ficheros, desde y hacia aquel PC, a una localización o destino de su elección en la que también tenga permisos. Por ejemplo, esto podría incluir un PC o servidor al que tenga permiso de acceso en su red, (o en cualquier otro lugar del mundo), para transferir datos a un lápiz USB conectado en su PC.

Puede copiar de forma recursiva particiones enteras y directorios con la opción scp -r. Dese cuenta de que scp -r sigue los enlaces simbólicos que encuentre al pasar por el árbol de directorios.

Ejemplos:

Ejemplo 1: Copiar una partición:

scp -r <user>@xxx.xxx.x.xxx:/media/disk1part6/ /media/diskXpartX/

Ejemplo 2: Copiar un directorio en una partición, es este caso un directorio llamado photos en $HOME:

scp -r <user>@xxx.xxx.x.xxx:~/photos/ /media/diskXpartX/xx

Ejemplo 3: Copiar un fichero de un directorio en una partición, en este caso un fichero en $HOME:

scp <user>@xxx.xxx.x.xxx:~/filename.txt /media/diskXpartX/xx

Ejemplo 4: Copiar un fichero en una partición:

scp <user>@xxx.xxx.x.xxx:/media/disk1part6/filename.txt /media/diskXpartX/xx

Ejemplo 5: Si ya está en la partición/directorio en el que quiere copiar otro directorio o ficheros, use un ' . ' (punto) :

scp -r <user>@xxx.xxx.x.xxx:/media/disk1part6/filename.txt . 

Ejemplo 6: Para copiar ficheros desde su PC/servidor a otro, (use scp -r si está copiando una partición o un directorio):

scp /media/disk1part6/filename.txt <user>@xxx.xxx.x.xxx:/media/diskXpartX/xx

Lea:

man scp

SSH remoto con Forwarding-X desde un PC-Windows:

* Descargue y queme en un CD el Cygwin XLiveCD
* Ponga el CD en la bandeja del CD-ROM del ordenador con Windows-PC y espere que el autorun lo arranque.
* Pinche en "Continue" hasta que salga una ventana de shell, y entre:

ssh -X username@xxx.xxx.xxx.xxx

Nota: xxx.xxx.xxx.xxx es el IP del computador remoto con Linux o su URL (por ejemplo una cuenta dyndns.org) y el nombre del usuario es por supuesto una cuenta que existe en la máquina remota. Después de conectar con éxito, empiece "kmail", por ejemplo, y revise su correo!

Importante: asegúrese de que hosts.allow tiene una entrada que permite el acceso desde PCs de otras redes. Si está detrás de un NAT-Firewall o un router, compruebe que el puerto 22 está dirigido hacia su máquina de Linux.

SSH con Konqueror o Krusader

Ambos, Konqueror y Krusader son capaces de acceder a datos remotamente usando el protocolo sftp:// y ambos usan el protocolo ssh.

Como funciona:
1) Abra una nueva ventana de Konqueror
2) Entre en la barra de dirección: sftp://username@ssh-server.com

Ejemplo 1:

sftp://aptosid1@remote_hostname_or_ip
 (Nota: Una ventana emergente se abre, pide su clave ssh, entre y pinche en OK)

Ejemplo 2:

sftp://username:password@remote_hostname_or_ip
(En este formulario NO se ve una ventana emergente pidiendo una clave, sino que será conectado directamente.)

Para un ambiente LAN

sftp://username@10.x.x.x or 198.x.x.x.x
(Nota: Un menú emergente pide la clave ssh, éntrela y haga click en OK)

La conexión KonquerorSSH GUI ahora se ha iniciado. Con esta ventana de Konqueror puede trabajar con archivos (copiar/ver) que están en el servidor SSH como si fueran archivos en un directorio en su máquina local.

NOTA: Si ha configurado el puerto ssh como otro puerto distinto al puerto 22 preseleccionado, necesitará especificar el puerto que sftp va a usar:

sftp://user@ip:port

'user@ip:port' es la sintaxis estándar para muchos programas como: sftp y smb.

SSHFS - Montaje remoto

SSFS es un método fácil, rápido y seguro que usa FUSE para montar un sistema remoto de archivos. El único requerimiento del lado del servidor es un deamon ejecutando ssh.

En el lado del cliente probablemente tendrá que instalar el sshfs: instalar fuse y grupos no es necesario en aptosid Eros y posteriores porque viene instalado por defecto:

En el lado del cliente, probablemente tendrá que instalar sshfs:

apt-get update  apt-get install sshfs

Ahora tiene que salir y hacer login de nuevo.

Montar un sistema remoto de archivos es muy sencillo:

sshfs username@remote_hostname:directory local_mount_point

donde el nombre_usuario es el nombre de la cuenta en el huésped remoto:

Si en esta orden no se da ningún directorio distinto, se montará el directorio home del usuario remoto Atención: los dos puntos : son imprescindibles, aunque no se dé ningún directorio!

Una vez montado, el directorio remoto se comporta como cualquier otro sistema de archivos local: puede revisar archivos, editarlos y correr scripts sobre ellos, igual como puede hacerlo en un sistema de archivos local.

Si desea desmontar el huésped remoto, use la orden siguiente:

fusermount -u local_mount_point

Si usa el sshfs frecuentemente, puede ser un buena opción agregar en el /etc/fstab:

sshfs#username@remote_hostname://remote_directory /local_mount_point fuse user,allow_other,uid=1000,gid=1000,noauto,fsname=sshfs#username@remote_hostname://remote_directory  0 0 

A continuación quite el comentario (signo #) a user_allow_other en /etc/fuse.conf:

 
 # Allow non-root users to specify the 'allow_other' or 'allow_root'
 # mount options.
 #
 user_allow_other

Esto permite montar los archivos usando el bien conocido comando mount a todos los usuarios que forman parte del grupo fuse:

mount /path/to/mount/point

Con esta línea en el fstab también puede usar el comando umount:

umount /path/to/mount/point

Para verificar si es miembro del grupo o no, use el comando siguiente:

cat /etc/group | grep fuse

Debe ver algo como esto:

fuse:x:117: <username>

Si su nombre_usuario suyo no aparece listado, use la orden adduser como root:

adduser <username> fuse

Ahora su nombre de usuario debe salir listado y debe poder ejecutar la orden:

Nota: El "id" no será mostrado en un listado del grupo "fuse" hasta que salga y vuelva a hacer el login.

mount local_mount_point

y, para desmontar:

umount local_mount_point
Content last revised 01/11/2011 0650 UTC