Los mejores trucos en la consola ssh

SSH es una potente herramienta, con unas posibilidades casi infinitas la gran mayoría desconocidas por muchos usuarios, por ello te expongo unos sencillos trucos, que seguro alguno te será desconocido.

 

Copia de clave pública SSH en máquina remota para iniciar sesión sin contraseña:

ssh-copy-id user@mihost

Para generar claves usa el comando ssh-keygen.

 

Crear un túnel desde el puerto 80 de tu server a el puerto 2001 en local:

ssh -N -L2001:localhost:80 mimaquina

Podrás acceder a la web a través de  http://localhost:2001

 

Emitir sonidos del micrófono en los altavoces de un equipo remoto:

dd if=/dev/dsp | ssh -c arcfour -C user@mihost dd of=/dev/dsp

La calidad del sonido no es excelente, úsalo para pruebas o bromas.

 

Comparar un archivo remoto con uno local:

ssh user@mihost cat /path/to/archivoremoto | diff /path/to/archivolocal –

Muy útil para comprobar diferencias entre archivos locales y remotos.

 

Montar carpeta/sistema de archivos a través de SSH:

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

Debes instalar SSHFS desde https://github.com/libfuse/sshfs . Es posible montar carpetas de seguridad en una red.

 

Copia de mihost1 a mihost2 a través del anfitrión:

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

 

Ejecutar programa de interfaz gráfica de un usuario de forma remota:

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

Se requiere tener activada la opción X11Forwarding, normalmente la puedes localizar en…
/etc/ssh/ssh_config

modificar para activar.
X11Forwarding yes

 

Crear una conexión persistente:

ssh -MNf <user>@<mihost>

Ahora deberás configurar en ~/.ssh/config:
 Host mihost
 ControlPath ~/.ssh/master-%r@%h:%p
 ControlMaster no

Muy útil si usas SSH para sincronizar archivos (rsync / SFTP / CVS / SVN) sobre una base regular, dado que no creara un nuevo socket cada vez que necesite una conexión SSH.

 

Pantalla a través de ssh:

ssh -t remote_host screen -r

 

Fijar advertencias ssh:

ssh-keygen -R <Lo lamento tus permisos fueron revocados>

 

Ejecutar cmds shell remoto a través de SSH:

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

 

Migrar base de datos MySQL a otro servidor desde SSH con solo un comando:

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

La migración se realiza a través de un túnel SSH comprimido. Es la forma más rápida de migrar una base de datos a otro servidor.

 

Copiar tu clave pública ssh a un servidor, desde un equipo que no usa ssh-copy-id:

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

Útil en Mac OS X que no tiene ssh-copy-id.

 

Prueba el rendimiento de la red vía ssh en modo live:

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

Muestra la velocidad de transferencia en directo. Necesitas tener instalado «pv».

Debian, Ubuntu y derivados.

apt-get install pv

Rhel, Centos, Fedora y derivados (dependiendo de la distro necesitaras el repositorio ‘extras’ activo.
yum install pv

 

Reanudar copia de seguridad SCP de un archivo:

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

Indispensable que rsync este instalado en los dos servidores.
rsync –partial –progress –rsh=ssh $file_source $user@$host:$destination_file local -> remote

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

 

Analizar el tráfico de forma remota usando ssh w / Wireshark:

ssh root@miservidor.com ‘tshark -f “port !22” -w -‘ | wireshark -k -i –

Capturaremos el tráfico de una máquina remota, enviara los datos pcap a través del enlace ssh, los podremos ver en Wireshark. Si pulsamos Ctrl + C se detendrá la captura y cerrara la ventana de Wireshark. Te recomiendo que filtres tshark para ahorrar ancho de banda. También puedes sustituir tshark por tcpdump así:
ssh root@miservidor.com tcpdump -w – ‘port !22’ | wireshark -k -i –

 

Mantener una sesión ssh siempre abierta:

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

Muy útil en dispositivos móviles que van cambiando de conexión a internet.

 

Transferir clave pública SSH a otra máquina con tan solo una linea:

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

Ten cuidado, si tienes varias keygen en «/ .ssh» es posible que las anexe.

 

Sincronizar fecha y hora con el servidor desde SSH:

date --set="$(ssh user@miserver date)"

Solo en caso de necesidad. Es mucho más efectivo usar NTP.

 

Duplicar los paquetes instalados en linux , de un servidor a la otro:

Duplicar paquetes en sistemas basados ​​en rpm / yum, Rhel, CentOs y derivados.

ssh root@miremote.host "rpm -qa" | xargs yum -y install

Duplicar paquetes en sistemas basados en Debian, Ubuntu y derivados.
ssh miremotehost 'dpkg --get-selections' | dpkg --set-selections && dselect install

Clonar paquetes en sistemas basados en Debian, Ubuntu y derivados.
apt-get install ssh root@hostAnfitrion "dpkg -l | grep ii" | awk '{print $2}'

 

Copia de seguridad de una base de datos remota a tu sistema local:

ssh user@mihost 'mysqldump dbname | gzip' > /path/to/backups/db-backup-`date +%Y-%m-%d`.sql.gz

Muy útil si lo usas con crontab.

 

Tiempos de actividad en un grupo de nodos en paralelo:

echo "uptime" | pee "ssh mihost1" "ssh mihost2" "ssh mihost3"

echo "uptime" | tee >(ssh mihost1) >(ssh mihost2) >(ssh mihost3)

El comando pee, lo puedes encontrar en «moreutils».

 

Ssh en una maquina detrás de un NAT compartido:

ssh -NR 0.0.0.0:2222:127.0.0.1:22 user@yo.mihost.com

Útil para tener acceso a la red de un server estando detrás de una NAT IP compartida. Necesitas acceso físico a DRAC / OIT / lom etc para ejecutar el comando.

Cuando ejecutas el comando en el host detrás de la NAT,  ssh se conecta a ella saltando al puerto 2222. La conexión se remitirá a la máquina oculta.

Nota: Algunas versiones antiguas de ssh no reconocen el 0.0.0.0 del ejemplo y sólo escucharan la dirección del bucle de retorno.

 

Agregar comentario