Me gustaría configurar la finalización del comando en zsh para mostrar los nombres de host después de escribir
ssh [TAB]
tomando los nombres de mi archivo .ssh / config (y preferiblemente de conocido_hosts y / etc / hosts y en cualquier otro lugar que tenga sentido) y presentando una sola lista.
Actualmente hace algo de esto, pero
- no usa .ssh / config en absoluto
- requiere un nombre de usuario primero, aunque el uso de .ssh / config hace que escribir nombres de usuario sea innecesario
- presenta varias listas (probablemente una de known_hosts y otra de / etc / hosts, pero no lo he verificado)
Por lo tanto, quiero incluir nombres de usuario conocidos, así como nombres de host conocidos en la lista (preferiblemente única) después de escribir ssh [TAB]
(Vengo aquí antes que Google porque 1) dará como resultado que la respuesta se almacene aquí, y 2) probablemente sea más eficiente. Si nadie más responde, buscaré la respuesta.)
ssh
shell
zsh
command-line-interface
iconoclasta
fuente
fuente
Respuestas:
Aquí está la parte relevante de mi
.zshrc
. No ha cambiado desde 2002, por lo que podría escribirlo de manera diferente hoy, pero aún funciona para completar los nombres de host desde~/.ssh/config
y~/.ssh/known_hosts
(siHashKnownHosts
está desactivado, no existía en esos días).fuente
La función que proporciona la
ssh
finalización se encuentra en/usr/share/zsh/functions/Completion/Unix/_ssh
mi sistema.También vea la
man zshcompsys
documentación (especialmente haga una búsqueda en "host" que aparece en varios lugares y "ssh" que aparece en un par de lugares).Es posible que agregar un
zstyle
comando a su~/.zshrc
haga lo que está buscando sin tener que modificar la función de finalización.fuente
/usr/share/zsh/4.3.9/functions/_ssh
Mac OS X (adapte la versión)Hago esto usando una lista de todos los hosts en un dominio dado usando dig. Puede reemplazar la siguiente función con el sistema de búsqueda que desee, incluido su archivo de hosts o una lista estática:
Nota: El código anterior podría no reemplazar completamente el sistema completo para el comando ssh en su configuración. Si tiene problemas con él, intente cambiar el comando "ssh" a otro comando aleatorio como "mycompletetest" y vea si la finalización funciona para eso.
¡También tenga en cuenta que esto hace la transferencia de zona dns en cada finalización! Si usa esto mucho o en un dominio bastante estático, tendría sentido hacer la búsqueda y guardar el resultado, entonces en su función de búsqueda simplemente configure reply = zone_result.
fuente
dig axfr mydomain.com @ns1.mydomain.com
. Asegúrese de que puede ejecutarlo manualmente y que parte de la salida debe ser una lista de hosts registrados en ese dominio y sus registros A o lo que sea. Eso era lo que estaba buscando, luego corté solo la parte del nombre de host, no el registro completamente calificado.Me gusta mantener mi
known_hosts
archivo hash y prefiero noHashKnownHosts
apagarlo. Descubrí que sembrar lo que @Gilles tiene con lo que ya está en mi historia ha sido bastante efectivo para mis necesidades.Además, FWIW, esto es lo que usé para Bash:
fuente