Manual SSH: El dios de la administración
remota
Y es que no se merece un titular peor. ¿Has estado alguna vez en el trabajo o en casa de y has necesitado o
te has acordado de un archivo que no tienes en ese momento pero sí en tu ordenador? Existen los escritorios
remotos, de hecho Ubuntu trae uno instalado por defecto, pero puede que no queramos hacer más que
mandarnos un archivo o hacer algo en el ordenador remoto. Para esto -y mucho más- existe SSH, con un
inmenso potencial.
SSH son las siglas de Secure SHell. Lo que te ofrece es una consola en un ordenador remoto con los
privilegios que tenga la cuenta con la que conectes. Es decir, si en tu PC tienes varias cuentas, puedes
conectar desde otro ordenador al tuyo con cualquiera de esas cuentas y sus respectivos privilegios, como
pudiera ser la cuenta root, la de tu administrador sudo o la de un usuario normal sin poder de administración.
Y todo esto con encriptación de datos.
En este tutorial os voy a mostrar algunas facetas de su uso, pero antes debéis saber que tener el servidor de
SSH corriendo es de cierto riesgo, ya que si no tocáis la configuración por defecto para aumentar la
seguridad a un nivel más que aceptable, puede ser un agujero para que alguien pueda entrar en vuestro
sistema. Pero no os preocupéis, si seguís estos pasos es difícil que suceda, nunca imposible, pero sí difícil.
El manual es algo extenso debido a que he intentado hacer que resulte bastante completo y que, como llevo
haciendo en el resto de tutoriales, quiero que sepáis lo que estáis haciendo, los porqués y lo que significa
cada cambio que hacéis. De esta forma tendréis criterio propio para vuestras modificaciones personales.
Instalar
En vuestros repositorios ya tenéis SSH dispuesto a instalar, así pues:
$ sudo aptitude install ssh
Una vez instalado se autoiniciará el demonio que ejecuta el servidor SSH y gestiona las solicitudes de login
remoto.
Configuración: Mayor seguridad
Como decía antes no es muy inteligente usar SSH sin modificar el fichero de configuración del servidor.
Vamos a modificar algunas opciones para conseguir una seguridad aceptable.
$ sudo gedit /etc/ssh/sshd_config
(nota) Si algunas de las opciones que aquí comento no aparecen en vuestro sshd_config, simplemente
agregadlas. Podéis hacerlo donde queráis, aunque lo suyo es que lo hagáis al principio o al final para que
sepáis cuales son las opciones que vosotros habéis agregado.
Vemos un fichero de configuración típico basado en “opción valor”. Vamos a comenzar las modificaciones
por el puerto que es lo primero que vemos y una de las cosas más importantes. SSH usa por defecto el puerto
22. Esto significa que si no lo cambiamos estamos entregando a un caco que sabe la dirección de dónde
vivimos (nuestra IP) también la llave del portal.
Cambiaremos el puerto para evitarlo. Esto no quita que el caco pueda intentar averiguar “el portal” si sabe
cómo hacerlo pero al menos le ponemos impedimentos. También hay scripts que atacan directamente el
puerto 22, por lo que el cambio de puerto es algo obligatorio. Poned el que queráis y abridlo también en el
router para que podáis acceder a vuestro ordenador desde otro. Usaremos por ejemplo el 4321, podéis poner
el que queráis. Así pues en el fichero de configuración:
port 4321
Un poco más abajo buscad la opción “Protocol” debe estar a valor 2, si no es así (valor 1 ó 2,1 ponedla. Hay
dos versiones de protocolo SSH. La primera está ya en desuso y tiene varias vulnerabilidades. Así debéis
dejarlo en vuestra configuración:
Protocol 2
Buscad la sección “Authentication”. Sus dos primeras opciones son también importantes. La primera es el
número de segundos que tendrá el usuario remoto para hacer login en tu máquina. Poned ese valor a pocos
segundos, no tardamos mucho en hacer login si sabemos la cuenta y la password. De esta forma evitamos
ciertos scripts que se aprovechan de ese tiempo. El valor típico en términos de seguridad es 30, aunque
podéis poned incluso menos si estáis más conformes.
LoginGraceTime 30
Justo debajo tenéis otras de las opciones más importantes, PermitRootLogin. Si antes usé la metáfora del
caco y el portal, esta opción viene a ser que le digáis también en qué planta del bloque de pisos vivís y qué
puerta, faltándole sólo la llave. Con esto lo que insinúo es que si sabe por qué puerto entrar, tan sólo le
queda averiguar dos datos: el nombre de una cuenta y su contraseña.
Si tenemos esta opción habilitada (yes) el caco ya tiene la mitad del trabajo hecho, pues el usuario “root”
existe en todas las máquinas GNU/Linux, tan sólo le queda averiguar la contraseña. Por eso es más que
recomendable deshabilitar esta opción. No os preocupéis los que tenéis en mente usar SSH para hacer un uso
administrativo, podéis hacerlo con vuestra cuenta y sudo sin problema alguno. Así pues…
PermitRootLogin no
También podéis señalar con el dedo las cuentas que tienen permitido el uso SSH (AllowUsers). Pongamos
un ejemplo, que es como mejor se entienden las cosas: Supongamos que tienes un amigo con el que quieres
compartir algo vía SSH y además tiene un hermano que es un enreda y en el que no confías por si te la
puede liar. Llamaremos a las cuentas “amigo” y “pesado” respectivamente. Para restringir el uso de SSH a
tu amigo y a tu propia cuenta (llamémosla “pepino”) podemos indicárselo mediante configuración. Incluso
podemos indicar también que tu amigo sólo se pueda conectar a tu ordenador desde el suyo, sabiendo su IP
(supongamos que es [Link]). Pondríamos en la configuración:
AllowUsers pepino amigo@[Link]
De esta forma tú podrías usar tu cuenta (pepino) para conectar a tu equipo desde cualquier lugar, tu amigo
podría hacerlo sólo desde su ordenador (si tiene esa IP) y tu hermano no podría conectar a tu máquina vía
SSH, si no tiene tu cuenta.
Otra opción interesante es el número de intentos que tiene el usuario remoto para hacer login
(MaxAuthTries). Como comenté antes, quien intente conectar debe acordarse de su login y password, por lo
que es tontería darle un número grande de intentos. En principio con dos son más que suficientes. Si al
segundo intento no lo ha conseguido se cortará la conexión SSH. Siempre se puede volver a conectar y
reintentarlo, pero así nos quitamos de encima ciertos scripts que intentan encontrar el login por fuerza bruta
a base de ensayo y error.
MaxAuthTries 2
Por último hay otra opción que define el número máximo de usuarios conectados simultáneamente a tu
máquina. Esto ha de adaptarse a tus propias necesidades. Si estamos hablando de un ordenador personal
donde sólo vas a conectar tú, pues lo lógico sería que como mucho hubiera una. Si estamos hablando de un
ordenador que hará las veces de servidor compartiendo una carpeta a varias máquinas, deberás decidir
cuántos son. Cuanto tengas claro el número indícalo en la opción siguiente en lugar de la ‘X’:
MaxStartups X
Ya podéis guardar y cerrar gedit. Con esto tenéis un servidor SSH bastante seguro. Como comenté antes
nunca es 100% seguro pero a priori podéis estar bien tranquilos. Sólo resta reiniciar el propio servidor SSH
para que tome los cambios que hemos efectuado en su configuración. Escribid en consola:
$ sudo /etc/init.d/ssh restart
Un último consejo. Como habéis visto podemos poner trabas al caco en cuanto a nuestra dirección y puerta,
pero ¿podemos ponerle problemas con la llave? La llave se entiende que es la contraseña. Y la respuesta es
afirmativa. Podéis hacerlo pero vosotros mismos. Poned claves en condiciones a vuestras cuentas. Usad
como poco 5 ó 6 caracteres y a ser posible que se entremezclen mayúsculas, minúsculas y números, por
ejemplo: entr3TuXeSyp3p1n0s.
Es un ejemplo exagerado, enrevesado a la hora de escribir e incómodo para meterlo en sudo cada dos por
tres, pero intentad que sea del estilo y procurad que no sea algo tan simple como vuestro nombre, el de
vuestra mascota, vuestra fecha de nacimiento, grupo favorito, etc.
Uso de SSH en consola
Conectar
Ahora que tenemos SSH bien seguro es hora de que veais para qué sirve. Parto de que tenéis dos equipos, el
que tenéis delante y al que queréis conectar. Obviamente debéis tener una cuenta en el segundo para poder
entrar. La forma de conectar por defecto es la siguiente:
$ ssh tu_cuenta@ip_del_ordenador_remoto
Esto sería si no hubiéramos cambiado el puerto, ya que intentaría conectar por el puerto 22 que es el puerto
por defecto del cliente. Podéis cambiarlo si queréis para que conecte por defecto por el puerto que le digáis
en lugar del 22 editando el fichero /etc/ssh/ssh_config. Descomentáis (si está comentada) la opción “Port” y
en lugar de “22″ ponéis el que queráis.
La otra opción, que es lo más normal, es simplemente indicarle en la línea de conexión qué puerto ha de
usar:
$ ssh -p puerto tu_cuenta@ip_del_ordenador_remoto
Para que lo veais más claro os voy a poner un ejemplo. Mi portátil está en la ip [Link] y el puerto SSH
que tengo para el mismo es el 4884. La cuenta que voy a usar para conectarme es “pepino”, así que para
conectar desde mi PC de sobremesa al portatil sería:
$ ssh -p 4884 pepino@[Link]
Tras esto me pedirá la contraseña:
pepino@[Link]'s password:
La introducimos y tras un texto de “bienvenida” veremos que nuestro prompt ha cambiado a
“nombre_cuenta@nombre_manquina”. Mi portatil se llama salamandra, así pues mi prompt es:
pepino@salamandra:~$
A partir de este instante tu consola está controlando el equipo remoto. Estarás en el home de tu cuenta en la
máquina remota. ¿Qué podemos hacer?
Copiar ficheros
Seguramente es lo primero que se os ha pasado por la cabeza a algunos. Efectivamente podemos copiar
ficheros fácilmente desde el ordenador remoto al que estamos usando en este momento, y es fácil (es una
sóla línea):
$ scp ruta/archivo cuenta_en_ordenador_presente@ip_ordenador_presente:ruta/fichero
Complicado a priori, ¿verdad? En el fondo no lo es, una vez sabéis qué es cada cosa. ruta/fichero es el lugar
donde está el archivo a copiar en la primera aparición, y el lugar donde se va a copiar en la segunda.
cuenta_en_ordenador_presente es la cuenta que estáis usando (u otra) en el ordenador que tenéis delante (no
el remoto). La ip_ordenador_presente es precisamente la ip de vuestro ordenador. Pero como siempre mejor
con un ejemplo.
Supongamos que quiero copiarme un fichero llamado [Link] que está en el escritorio de la cuenta
“pepino” del portátil (el ordenador remoto) y quiero copiármelo en el home de la cuenta “tux” de mi
ordenador presente, cuya ip es [Link]. Ya que estoy quiero aprovechar y cambiarle el nombre. Quiero
que se llame [Link] en lugar de [Link]. Escribiremos en el SSH (es una sóla línea):
$ scp /home/pepino/Desktop/[Link] tux@[Link]:/home/tux/[Link]
¿No funciona? ¿Sabes por qué? El puerto, recordad que lo cambiamos y aquí también tenemos que
indicárselo. En el ordenador de sobremesa tengo abierto el puerto 8448, así pues (es una sóla línea):
$ scp -P 8448 /home/pepino/Desktop/[Link] tux@[Link]:/home/tux/[Link]
Nos pedirá la contraseña de la cuenta “tux” en el ordenador que tenemos delante y copiará el archivo:
pepino@[Link]'s password:
[Link] 100% 292KB 291.7KB/s 00:00
Y si ya estuvieramos en el escritorio (prompt: pepino@salamandra:~/Desktop$) no habría que poner toda la
ruta si no queremos ya que tomaría la ruta relativa a la actual:
$ scp -P 8448 [Link] tux@[Link]:/home/tux/[Link]
(Nota) Ojo con la ‘P’ que en este caso debe ser mayúscula.
Otra gracia del asunto es que no tienes por qué copiarlo a tu equipo actual. Si tienes acceso a otro ordenador
más, puedes copiar algo de uno al otro del mismo modo, es decir, teniendo login en ambos y sabiendo su IP.
Por otro lado si lo que queremos copiar es una carpeta, basta con añadirle el parámetro ‘-r’ para que copie
todo su contenido (r=recursivo).
Otros usos
Básicamente cualquiera que se os pase por la cabeza. Daros cuenta que para un sistema GNU/Linux el
interfaz no lo es todo, de hecho es prácticamente una aplicación que está corriendo bajo el propio sistema
operativo, por lo que podéis administrar perfectamente vuestro equipo desde una consola y con acceso
remoto vía SSH. Dentro de una conexión SSH, podéis reiniciarlo:
pepino@salamandra:~$ sudo reboot
Broadcast message from pepino@salamandra
(/dev/pts/1) at 23:45 ...
The system is going down for reboot NOW!
O apagarlo:
pepino@salamandra:~$ sudo halt
Broadcast message from pepino@salamandra
(/dev/pts/1) at 23:51 ...
The system is going down for halt NOW!
O usar cualquier otra aplicación de texto, como podría ser una que os presenté hace poco y que os podría
venir muy bien en este caso: links. De esta forma si queréis podeís navegar en la consola y descargaros algo
en vuestra máquina estando en otra.
El abanico de posibilidades es realmente inmenso.
SSH en Nautilus
Lo cierto es que si lo que queremos es simplemente copiar archivos o ver el contenido de alguno de ellos
que están en otra máquina, podemos usar nautilus que siempre será más amigable para algunos que a través
de consola.
No hay mucho cambio al respecto. Alt+F2 y escribid dentro “nautilus”. Se os abrirá el navegador de
archivos. Nautilus tiene dos formas de mostrarte dónde estás dentro de la jerarquía de directorios. Una es a
través de botones donde cada carpeta es un botón que puedes pulsar para volver atrás:
Y otra que te indica la ruta en modo texto:
Para cambiar de un modo al otro pinchad en el icono que está a la izquierda del todo que es un folio escrito y
un lápiz. Nos quedaremos en el segundo modo y en la caja de texto de “Lugar:” escribiremos la orden de
conexión:
ssh://tu_cuenta@ip_pc_remoto
Siguiendo con los ejemplos anteriores:
ssh://pepino@[Link]
Esto sería si el puerto es el que está por defecto, como nosotros lo cambiamos tenemos que indicárselo con
“:puerto” tras la ip. En nuestro ejemplo:
ssh://pepino@[Link]:4884
Ahora nos pedirá la contraseña de la cuenta. Tenomos estas tres opciones:
Tomad la decisión que queráis. Personalmente yo soy de los prefieren tomarse la molestia de introducir la
clave en cuestiones tan importantes como es la seguridad de SSH.
Tras esto nos colocará en la raíz de la máquina remota. Si lo que queríamos era que nos dejara en una
carpeta determinada se lo podemos indicar en la línea de conexión. Por ejemplo en el escritorio de nuestra
cuenta:
ssh://pepino@[Link]:4884/home/pepino/Desktop/
Ahora podéis copiar archivos y carpetas con total comodidad desde vuestro escritorio GNOME.
Ejecutar aplicaciones gráficas remotamente
Otra cosa muy práctica que podemos hacer gracias a SSH es ejecutar una aplicación que no tenemos en el
equipo actual pero sí en el remoto y trabajar allí. Es decir, puedes mirarlo como un servidor de trabajo
gráfico. Si aún no queda claro os pongo otro ejemplo:
Mientras estábais fuera de casa el pesado de tu hermano se ha hecho con tu ordenador porque tiene que
hacer algo y si no “se lo dice a mamá“. Sin embargo tú también tienes cosas que hacer en él. No hay
problema. Te pones en el equipo de tu hermano y abres la aplicación que necesites de tu propio ordenador en
el PC de tu hermano.
Práctico, ¿verdad? Pues es muy sencillo, basta con añadir un argumento más (-X) y el nombre de la
aplicación que queremos usar. Por ejemplo imaginemos que queremos jugar a Doom en DOSBox, y en el
ordenador de tu hermano no tenemos ninguna de las dos cosas. Podemos instalar DOSBox, copiar la carpeta
de Doom, montarla y jugar. O también podemos ejecutar directamente DOSBox remotamente y montar el
juego que ya tenemos en nuestro equipo:
$ ssh -X -p 4884 pepino@[Link] dosbox
Ahora tan sólo resta montar la carpeta como ya os mostré. Podéis introducir la ruta de vuestro PC pues en el
fondo es en vuestro PC donde se está ejecutando todo.
Cambiar el mensaje de bienvenida
Ya saliendo de la parte práctica, he querido hacer esta pequeña sección dentro del manual para los fanáticos
de la personalización como yo. Si recordáis cuando os expliqué la conexión por consola, os comenté que tras
introducir la clave nos daba una especie de texto de bienvenida. Este texto de bienvenida es modificable y
puedes poner lo que quieras. Este es el de mi equipo de sobremesa:
Para hacerlo es simple. Tienes que editar (con privilegios de administrador) el archivo /var/run/motd y
escribir dentro lo que quieras que aparezca cuando alguien se conecte. Es decir:
$ sudo gedit /var/run/motd
Lo modificamos a nuestro gusto, guardamos y cerramos gedit.
Alguna vez se preguntaron cómo funciona el tunneling? Acá va una pequeña demostración de como
funciona:
Utilizando el comando estándard “ssh” para abrir el tunnel
sudo ssh -C user@[Link] -L
localport:remote_private_machine_ip:remote_private_machine_port
* Nota: Es requerido tener permisos para abrir un puerto nuevo en localhost, por eso el ejemplo esta hecho
con sudo.
Ejemplos
Red remota: [Link] – [Link]
Server remoto sin acceso directo a internet: [Link]
Conectarse por SSH a ese server remoto sin acceso directo a internet:
sudo ssh -C user@[Link] -L 2222:[Link]:22
Lo que acabamos de hacer es abrir un puerto en localhost [2222] que al conectarnos a ese puerto vamos
directamente via el ssh tunnel a [Link]->[Link]:22
Conectarse por HTTP a ese server remoto sin acceso directo a internet:
sudo ssh -C user@[Link] -L 8080:[Link]:80
Conectarse por HTTPS a ese server remoto sin acceso directo a internet:
sudo ssh -C user@[Link] -L 4444:[Link]:443
Abrir varios tunnels a la vez:
sudo ssh -C user@[Link] -L 2222:[Link]:22 -L 8080:[Link]:80 -L
4444:192.
Los 25 mejores comandos/trucos SSH
1. 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.
2. 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 [Link]
3. 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.
4. 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.
5. 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
6. 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.
7. 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.
8. 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
9. 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.
10. 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).
11. Llamar a puertos (port knocking):
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 [Link] para que
interpretase las llamadas anteriores sería:
[options]
Logfile = /var/log/[Link]
[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
12. 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.
13. Ejecutar comandos de consola remotos por SSH sin comillas de escape:
ssh host -l user $(<[Link])
Método mas simple y mas portable:
ssh host -l user “`cat [Link]`”
14. 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=[Link] -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.
15. Eliminar una línea de un fichero de texto. Útil para corregir warnings tipo “ssh host key change“:
sed -i 8d ~/.ssh/known_hosts
16. 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.
17. 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 pv
Fedora:
yum install pv
(necesita tener habilitados los repositorios ‘extras’)
18. Como establecer una sesión remota con GNU screen a la que puedas reconectar:
ssh -t user@[Link] /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.
19. Reanudar SCP (secure copy) de un fichero grande:
rsync –partial –progress –rsh=ssh $file_source $user@$host:$destination_file
Puede 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 -> remote
rsync –partial –progress –rsh=ssh $user@$host:$remote_file $destination_file
remote -> local
20. Analizar tráfico de forma remota por SSH con Wireshark:
ssh root@[Link] ‘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@[Link] tcpdump -w – ‘port !22′ | wireshark -k -i -
21. Mantener abierta una sesión SSH para siempre:
autossh -M50000 -t [Link] ‘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.
22. 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.
23. Acelerador de ancho de banda con cstream:
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 [Link]
Por ejemplo:
echo w00t, i’m 733+ | cstream -b1 -t2
24. 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.
25. Copiar la entrada estándar stdin al buffer X11:
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.