Comandos avanzados de SSH – SSH Tips & Tricks

Posted: noviembre 29th, 2010 | Author: | Filed under: Recursos Web, Servidores Linux | 1 Comment »

1) Acceso SSH sin contraseña:

ssh-copy-id user@host

Generamos las llaves mediante ssh-keygen y luego las copiamos al equipo para permitir el acceso sin clave.

2) Crear un tunel desde un puerto local a un equipo remoto en puerto 80:

ssh -N -L2002:localhost:80 equiporemoto

Nos permite acceder a un sitio web a través de http://localhost:2002/

3) Conectar micrófono a un equipo remoto:

dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp

Nos permite comunicar nuestro microfono con la salida de audio del equipo remoto.

4) Comparar un archivo remoto con uno local:

ssh user@host cat /path/to/remotefile | diff /path/to/localfile –

Útil para saber si un archivo local es idéntico a uno remoto.

5) Montar unidad a través de SSH

sshfs name@server:/path/to/folder /path/to/mount/point

Permite montar un directorio en forma remota, requiere SSHFS: http://fuse.sourceforge.net/sshfs.html

6) Conexión SSH con un host intermedio:

ssh -t reachable_host ssh unreachable_host

Podemos acceder a un equipo inaccesible desde nuestra red, pero que es accesible desde une red remota. Hacemos una conexión con un intermediario que nos permite acceder.

7) Copiar de host1 a host2 mediante el equipo local:

ssh root@host1 “cd /somedir/tocopy/ && tar -cf – .” | ssh root@host2 “cd /samedir/tocopyto/ && tar -xf -”

Útil cuando dos equipos no pueden conectarse en forma directa, utilizamos nuestro equipo como intermediario.

8) Ejecutar programas de entorno gráfico en forma remota:

ssh -fX <user>@<host> <program>

El servidor SSH requiere de la siguiente configuración:

X11Forwarding yes # default en Debian

Recomendable también:

Compression delayed

9) Crear una conexión persistente:

ssh -MNf <user>@<host>

10) Conectar salida de video por SSH:

ssh -t remote_host screen -r

11) Port Knocking!

knock <host> 3000 4000 5000 && ssh -p <port> user@host && knock <host> 5000 4000 3000

Knock para activar servicio SSH y para cerrar.
Ejemplo:
[options]
logfile = /var/log/knockd.log
[openSSH]
sequence = 3000,4000,5000
seq_timeout = 5
command = /sbin/iptables -A INPUT -i eth0 -s %IP% -p tcp –dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 5000,4000,3000
seq_timeout = 5
command = /sbin/iptables -D INPUT -i eth0 -s %IP% -p tcp –dport 22 -j ACCEPT
tcpflags = syn

12) Remover una línea de texto:

ssh-keygen -R <the_offending_host>

13) Ejecutar comandos complejos sobre SSH sin comillas de escape:

ssh host -l user $(<cmd.txt)

14) Copiar una base de datos MySQL a un servidor nuevo:

mysqldump –add-drop-table –extended-insert –force –log-error=error.log -uUSER -pPASS OLD_DB_NAME | ssh -C user@newhost “mysql -uUSER -pPASS NEW_DB_NAME”

15) Quitar una línea de un archivo de texto, útil para eliminar las alertas: “ssh host key change”

sed -i 8d ~/.ssh/known_hosts

16) Copiar la clave pública de SSH s un servidor que no tiene ssh-copy-id

cat ~/.ssh/id_rsa.pub | ssh user@machine “mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys”

Nos permite acceder a un equipo remoto sin necesidad de la contraseña.

17) Test de velocidad SSH

yes | pv | ssh $host “cat > /dev/null”

Nos muestra en vivo la transferencia, envia la salida a /dev/null
Es necesario contar con pv instalado:
Debian: ‘apt-get install pv’
Fedora: ‘yum install pv’ (‘extras’ repository)

18) Establecer una ventana GNU a la cual es posible reconectarse:

ssh -t user@some.domain.com /usr/bin/screen -xRR

19) Continuar scp para un archivo grande:

rsync –partial –progress –rsh=ssh $file_source $user@$host:$destination_file

Permite resumir una copia scp mediante rsync.
Requiere rsync en ambos hosts.

rsync –partial –progress –rsh=ssh $file_source $user@$host:$destination_file local -> remote
o
rsync –partial –progress –rsh=ssh $user@$host:$remote_file $destination_file remote -> local

20) Analizar tráfico ssh remoto mediante wireshark

ssh root@server.com ‘tshark -f “port !22″ -w -’ | wireshark -k -i –

Utilizando tcpdump:
ssh root@example.com tcpdump -w – ‘port !22′ | wireshark -k -i –

21) Abrir una sesión SSH en por tiempo indefinido:

autossh -M50000 -t server.example.com ‘screen -raAd mysession’

Ideal para conexiones inestables o cuando se requiere cambiar de servicio WiFi.

22) Mayor seguridad en la conexión:

ssh -4 -C -c blowfish-cbc

23) Balanceo de ancho de banda:

tar -cj /backup | cstream -t 77k | ssh host ‘tar -xj -C /backup’

Comprime y limita el ancho de banda a 77k bit/s.

24) Transferir la clave pública a través de SSH:

ssh-keygen; ssh-copy-id user@host; ssh user@host

25) Copiar stdin al buffer de tu X11:

ssh user@host cat /path/to/some/file | xclip


Como proteger un directorio en un sitio web con contraseña

Posted: noviembre 13th, 2010 | Author: | Filed under: Internet, Recursos Web | Comentarios desactivados en Como proteger un directorio en un sitio web con contraseña

Gestores FOREX y asesoria en inversiones. Mercado de divisas.

Al momento de desarrollar un nuevo sitio web suele suceder que debemos publicar el sitio para que el clienta pueda verlo, pero no queremos que el resto del mundo acceda hasta el momento en que este listo. Tampoco queremos que los buscadores lo indexen, ya que daran de alta el contenido que puede ser de prueba o bien podemos tener el sitio en una url temporal, como un subdominio o un dominio de desarrollo. Para evitar dolores de cabeza más tarde viendo como el contenido es indexado mezclando los sitios podemos colocar una contraseña y evitar el indexado erróneo.

Una solución simple en Apache es utilizar un archivo .htaccess y .htpasswd para crear una simple autenticación de usuario. El procedimiento que debemos seguir es simple. Primero definimos un nombre de usuario y contraseña, por ejemplo:

  • Usuario: usuario
  • Contraseña: 123456

El siguiente paso es comprender como funciona el sistema de autenticación de Apache. Debemos crear un archivo .htpasswd que contendrá el usuario y contraseña. Creamos un archivo .htpasswd con el siguiente contenido (si lo hacemos en windows con notepad debemos tener cuidado al guardar de seleccionar todas las extensiones de archivo, ya que por defecto esta marcada la opción Archivos de Texto que nos agrega .txt al final):

usuario:gtXa5NHfNQI9U

El archivo .htpasswd contiene simplemente eso. Como pueden ver la contraseña se encuentra encodeada en base 64, por lo cual si trabajos en un servidor compartido no debemos confiar a este sistema una seguridad de relevancia. Es una simple barrera, no un sistema infalible…

Para encodear la contraseña a base 64 podemos buscar en Google alguna de las webs que hacen esto online, por ejemplo: http://www.motobit.com/util/base64-decoder-encoder.asp

Colocamos el nombre de usuario, dos puntos y la contraseña encodeada.

Hecho esto colocamos este archivo en un directorio que no sea visible desde el servidor web. Es decir que si tipeamos una URL no podamos acceder al mismo. Si estamos trabajando en un servidor Apache en Linux, podríamos tener nuestro sitio web en una ruta como la siguiente:

/var/www/vhosts/sitioweb.com/

Por lo general tendremos un directorio httpdocs que es donde colocamos los archivos web, pero tendremos cuidado de NO colocar el .htpasswd ahí para que no sea visible desde Internet. Colocamos el archivo en la siguiente ubicación:

/var/www/vhosts/sitioweb.com/.htpasswd

Hecho esto pasamos a proteger el directorio, por ejemplo podría ser el siguiente:

/var/www/vhosts/sitioweb.com/httpdocs/nuevo

El archivo .htaccess contendrá lo siguiente:

AuthName “Restricted Area”
AuthType Basic
AuthUserFile /var/www/vhosts/sitioweb.com/.htpasswd
AuthGroupFile /dev/null
require valid-user

Como ven desde el .htaccess pedimos que Apache autentique con el archivo .htpasswd. El archivo .htaccess quedaría ubicado así:

/var/www/vhosts/sitioweb.com/httpdocs/nuevo/.htaccess

Listo, con estos dos archivos en su lugar y con las rutas correctas, veremos el mensaje que pide usuario y contraseña al acceder al sitio web.

Al momento de desarrollar un nuevo sitio web suele suceder que debemos publicar el sitio para que el clienta pueda verlo, pero no queremos que el resto del mundo acceda hasta el momento en que este listo. Tampoco queremos que los buscadores lo indexen, ya que daran de alta el contenido que puede ser de prueba o bien podemos tener el sitio en una url temporal, como un subdominio o un dominio de desarrollo. Para evitar dolores de cabeza más tarde viendo como el contenido es indexado mezclando los sitios podemos colocar una contraseña y evitar el indexado erróneo.