Los 25 mejores comandos/trucos SSH
Esta entrada es una simple traducción con algunas notas personales de este post en el que se recogen, explican y enumeran los 25 comandos SSH más útiles, más populares y por lo tanto más votados según el ranking de CommandLineFu. De esta forma haremos un repaso y/o aprenderemos nuevos comandos SSH de esta potente herramienta, OpenSSH, con ilimitadas posibilidades.
-
Copiar una clave SSH a un host para que permita logins SSH sin password:
ssh-copy-id user@host
Con el comando ssh-keygen podemos generar las claves. -
Iniciar un túnel SSH desde el puerto 80 de un host remoto al puerto 2001 de nuestra máquina local:
ssh –N –L2001:localhost:80 host_remoto
Ahora puedes acceder al sitio web remoto desde http://localhost:2001/ -
Enviar el sonido del micrófono local a los altavoces de un host remoto:
dd if=/dev/dsp | ssh –c arcfour –C user@host dd of=/dev/dsp
Esto enviará el sonido del puerto del micrófono como salida al puerto de los altavoces del equipo objetivo por SSH. La calidad del sonido es muy mala, por lo que se escuchará con mucho ruido de fondo. -
Comparar un archivo remoto con uno local:
ssh user@host cat /ruta/del/archive_remoto | diff /ruta/del/archive_local
Útil para comprobar si un archivo local y otro remoto tienen diferencias. -
Montar carpeta/sistema de ficheros por medio de SSH:
sshfs name@server:/ruta/de/carpeta /ruta/de/punto/de/montaje
Es necesario instalar SSHFS.
Con esto podremos montar una carpeta por red de forma segura -
Conexión SSH por medio de “host in the middle”:
ssh –t host_alcanzable ssh host_inalcanzable
El host inalcanzable no está disponible desde la red local pero si es alcanzable desde la red del host alcanzable. Este comando crea una conexión al host inalcanzable por medio de una conexión oculta desde el host alcanzable. -
Copiar desde host1 a host2 desde tu host:
ssh root@host1 “cd /directorio/a/copiar/ && tar –cf -.” | ssh root@host2 “cd /directorio/destino/de/copia/ && tar –xf –“
Útil si solo tú tienes acceso a host1 y host2 pero ellos no tienen acceso a tu host (por lo que ncat no funciona) y no tienen acceso entre ellos. -
Correr cualquier aplicación GUI remotamente:
ssh –fX user@host [aplicación]
La configuración del server SSH requiere:
X11 Forwarding yes #por defecto en Debian
Compression delayed #configuración conveniente -
Crear una conexión persistente a una máquina:
ssh -MNf user@host
Crear una conexión SSH persistente a un host en background. Combinar con tu configuración SSH en ~/.ssh/config:
Host host
ControlPath ~/.ssh/master-%r@%h:%p
ControlMaster no
Todas las conexiones SSH a la máquina irán por el socket SSH persistente. Esto es muy útil si usas SSH para sincronizar archivos (con rsync, sftp, cvs, svn…) de forma regular ya que no se crearán nuevos sockets cada vez que se abra una conexión SSH. -
Adjuntar la pantalla por SSH:
ssh –t remote_host screen –r
Directamente adjunta la pantalla de una sesión remota (guarda un proceso bash padre inútil). -
knock [host] 3000 4000 5000 && ssh –p [port] user@host && knock [host] 5000 4000 3000
Llama a los puertos 3000 4000 5000 para abrir el puerto de un servicio (ssh por ejemplo) y vuelve a llamar a los puertos 5000 4000 3000 para cerrar el acceso al dicho servicio. Para esto es necesario tener instalado knockd.
Un ejemplo de configuración del servicio knockd mediante el archivo knockd.conf para que interpretase las llamadas anteriores sería:
[options]
Logfile = /var/log/knockd.log
[openSSH]
sequence = 3000,4000,5000
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 -
Eliminar una línea de un fichero de texto. Muy útil para solucionar ssh host key warnings (ver alternativas):
ssh-keygen -R [host_objetivo]
En este caso es mejor usar una herramienta dedicada. -
Ejecutar comandos de consola remotos por SSH sin comillas de escape:
ssh host -l user $(<cmd.txt)Método mas simple y mas portable:
ssh host -l user “`cat cmd.txt`” -
Copiar una base de datos MySQL a un nuevo servidor vía SSH con un comando:
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”
Volcar una base de datos MySQL por un túnel SSH comprimido y usarlo como entrada a MySQL. Parece ser la forma más rápida de migrar una base de datos a un nuevo server. -
Eliminar una línea de un fichero de texto. Útil para corregir warnings tipo “ssh host key change“:
sed -i 8d ~/.ssh/known_hosts -
Copiar nuestra clave pública SSH a un servidor desde una máquina que no tenga ssh-copy-id:
cat ~/.ssh/id_rsa.pub | ssh user@machine “mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys”
Si usas Mac OS X o cualquier otra variante *nix que no venga con ssh-copy-id esta línea te será útil para añadir tu clave pública a una maquina remota para poder así acceder a ella por SSH sin usar password.
Nota: En el grupo “Debian Administrator” de Linkedin hay un debate muy interesante acerca de este comando. -
Test de rendimiento del canal SSH en tiempo real:
yes | pv | ssh $host "cat > /dev/null"
Conecta a un host vía SSH y muestra la velocidad de transferencia en tiempo real enviando todos los datos transferidos a /dev/null
Necesita tener pv (pipe viewer) instalado.Debian:
apt-get install pvFedora:
yum install pv(necesita tener habilitados los repositorios ‘extras’)
-
ssh -t user@some.domain.com /usr/bin/screen -xRR
Mucho antes de que existieran las terminales etiquetadas la gente solía usar GNU screen para abrir varias consolas en una única terminal de texto. Esto combinado con SSH nos da la posibilidad de tener abiertas varias consolas usando una única conexión remota con las opciones de arriba. Si se separa con “Ctrl-a d” o si la sesión SSH se termina de forma accidental, todos los procesos que corren en las consolas remotas permanecen ininterrumpidos y preparados para poder reconectar. Otro comando de screen útil son “Ctrl-a d” (abrir nueva consola) y “Ctrl-a a” (alternar entre consolas). Se recomienda la lectura de esta guía rápida para más comandos screen. -
rsync –partial –progress –rsh=ssh $file_source $user@$host:$destination_filePuede reanudar una copia segura hecha con SCP que haya fallado usando rsync, muy útil cuando se transfieren grandes archivos como volcados de bases de datos por VPN
Requiere tener instalado rsync en ambos hosts.
rsync –partial –progress –rsh=ssh $file_source $user@$host:$destination_file local -> remoteo
rsync –partial –progress –rsh=ssh $user@$host:$remote_file $destination_file remote -> local -
ssh root@server.com ‘tshark -f “port !22″ -w -’ | wireshark -k -i -Este comando captura el tráfico en una máquina remota con tshark, envía los datos pcap raw caturados por el canal SSH y los muestra en Wireshark. Pulsando Ctrl-c se para la captura y desafortunadamente se cierra la ventana de Wireshark. Esta conducta se puede arreglar pasándole -c # a tshark para que solo capture un # número de paquetes o también redireccionando los datos por un canal determinado distinto al SSH en vez de devolverlos a Wireshark por el mismo canal SSH. Se recomienda filtrar todo lo posible en el comando tshark para conservar el ancho de banda. También se puede reemplazar tshark por tcpdump asi:
ssh root@example.com tcpdump -w – ‘port !22′ | wireshark -k -i - -
Mantener abierta una sesión SSH para siempre:
autossh -M50000 -t server.example.com ‘screen -raAd mysession’
Se abre una sesión SSH que permanece abierta indefinidamente. Muy útil para dispositivos portátiles que usen conexión WIFI en los que se pueden producir cortes de conectividad o cambios de spot WIFI. -
Clientes SSH más rápidos, más duros y más fuertes:
ssh -4 -C -c blowfish-cbc
Forzamos IPv4, compresión del flujo y especificamos que Blowfish sea el algoritmo de cifrado del flujo de datos. Se supone que también se puede usar aes256-ctr como especificación de cifrado. También se omiten temas como control de sesiones master y otros temas que no estarán disponibles en la consola aunque esto hará que la velocidad del canal también mejore. -
tar -cj /backup | cstream -t 777k | ssh host ‘tar -xj -C /backup’El comando comprime en bzip una carpeta y la transmite al host por la red a 777Kbit/s. cstream puede hacer mucho más, ver http://www.cons.org/cracauer/cstream.html#usage
Por ejemplo:echo w00t, i’m 733+ | cstream -b1 -t2 -
Transferir la clave pública SSH a otra máquina en un solo paso:
ssh-keygen; ssh-copy-id user@host; ssh user@host
Esta secuencia permite la configuración simple de logins SSH sin contraseña. Cuidado ya que si ya se tiene un par de claves SSH en el directorio ~/.ssh de la maquina local es posible que ssh-keygen la sobrescriba. ssh-copy-id copia la clave pública a la máquina remota y la añade como clave autorizada en el archivo remoto ~/.ssh/authorized_keys. Cuando se prueba la conexión SSH, si no se ha usado contraseña en la generación de la clave, la consola remota aparece en cuanto se invoca con SSH user@host. -
ssh user@host cat /path/to/some/file | xclip¿Alguna vez has tenido que hacer copia de forma segura (SCP) de un archivo a tu maquina local de trabajo para copiar su contenido a un mail? xclip puede ayudarte a hacerlo. Copia su salida estándar stdin al buffer X11 para que lo único que tengas que hacer sea click para copiar el contenido de ese gran fichero.
Espero que sean de utilidad y que se comenten resultados, mas comandos útiles y posibles adaptaciones o problemas.













Pingback: Bitacoras.com
Pingback: Vyatta en español | openredes - Networking Open Source
Pingback: SSH « La cocina de Tux
una pregunta, como se haria para ejecutar por ejemplo GIMP en un equipo de mi red por ssh en el mio y poder editar archivos locales?
Hola till.
No lo había probado antes, realmente es una pasada:
ssh -fX user@host gimp
Te abre la aplicación remota en la máquina que ejecuta la sesión ssh (desde la que he probado ni siquiera tiene gimp instalado) y desde Archivo – Abrir tienes acceso a los archivos remotos para poder abrirlos y modificarlos.
Espero que te sirva!
Releyendo de nuevo tu consulta creo que no te había entendido bien, parece que lo que quieres es tener acceso a los archivos locales una vez ejecutas gimp por ssh en una máquina remota no?
Para eso necesitaría montar la carpeta local a la que quieres tener acceso en el host remoto, puedes usar sftp o sshfs por ejemplo:
sftp://host_remoto/ruta/carpeta/
sshfs user@host_remoto:/ruta/remota /ruta/local
Una vez montados ejecutas el comando:
ssh -fX user@host gimp
Posiblemente se pueda hacer de forma mucho mas elegante lanzando un solo comando, pero aun no he descubierto como…
Buenas quería consultarles tengo un sistema operativo Fedora y quiero comunicarme por medio de un escritorio remoto como lo puedo configurar por medio de comandos sin utilizar aplicaciones como team viewer ,vpn etc que sean solo comandos ?
Les agradezco su tiempo y su ayuda que pasen un exc día.
Hola Franco, no entiendo bien tu consulta, hablas de comunicarte con el Fedora por escritorio remoto y luego de solo comandos, te agradecería que fueras mas explícito.
Para conectarte al Fedora por escritorio remoto desde un Windows puedes instalar xrdp y para conectarte desde otro Linux, tienes muchas alternativas, entre ellas conectarte al Fedora por SSH pero usando el flag -X para habilitar la característica X11Forwarding de SSH, que te permite abrir aplicaciones del Fedora de forma remota mostrándolas gráficamente en el otro Linux. Para esto, tu Fedora tiene que tener instalado el servidor SSH, comprueba que esté instalado con:
fedora~$ service sshd status
o con:
fedora~$ /etc/init.d/sshd status
si no lo tienes instalado:
fedora~$ yum -y install openssh-server
y conectas a el desde el otro Linux con:
otro-linux~$ ssh -X usuario@fedora
Hola si es que tengo que instalar fedora en una maquina virtual y tengo que lograr que halla comunicacion usando comandos via remota(escritorio via remota) no puedo usar team viewer ni ninguna otra aplicacion me dijieron que solo comandos les agradeceria si me pueden orientarr en como hacerlo