Je voudrais configurer la complétion de commande sur zsh pour afficher les noms d'hôtes après avoir tapé
ssh [TAB]
prendre les noms de mon fichier .ssh / config (et de préférence à partir des hôtes connus et / etc / hosts et partout ailleurs qui a du sens) et présenter une seule liste.
Il fait une partie de cela actuellement, mais
- il n'utilise pas du tout .ssh / config
- il nécessite d'abord un nom d'utilisateur, même si l'utilisation de .ssh / config rend la saisie des noms d'utilisateur inutile
- il présente plusieurs listes (probablement une de known_hosts et une autre de / etc / hosts, mais je ne l'ai pas vérifié)
Je veux donc inclure les noms d'utilisateurs connus ainsi que les noms d'hôtes connus dans la liste (de préférence unique) après avoir tapé ssh [TAB]
(Je viens ici avant Google parce que 1) cela entraînera le stockage de la réponse ici, et 2) c'est probablement plus efficace. Si personne d'autre ne répond, je traquerai la réponse.)
ssh
shell
zsh
command-line-interface
iconoclaste
la source
la source
Réponses:
Voici la partie pertinente de mon
.zshrc
. Il n'a pas changé depuis 2002, donc je pourrais l'écrire différemment aujourd'hui, mais il fonctionne toujours pour compléter les noms d'hôte de~/.ssh/config
et~/.ssh/known_hosts
(s'ilHashKnownHosts
est désactivé - il n'existait pas à l'époque).la source
La fonction qui fournit l'
ssh
achèvement se trouve/usr/share/zsh/functions/Completion/Unix/_ssh
sur mon système.Voir aussi la
man zshcompsys
documentation (surtout faire une recherche sur "host" qui apparaît à plusieurs endroits et "ssh" qui apparaît à quelques endroits).Il est possible que l'ajout d'une
zstyle
commande à votre~/.zshrc
fonction fasse ce que vous recherchez sans avoir à modifier la fonction d'achèvement.la source
/usr/share/zsh/4.3.9/functions/_ssh
Mac OS X (adapter la version)Je fais cela en utilisant une liste de tous les hôtes sur un domaine donné en utilisant dig. Vous pouvez remplacer la fonction ci-dessous par le système de recherche que vous souhaitez, y compris votre fichier d'hôtes ou une liste statique:
Remarque: Le code ci-dessus peut ne pas remplacer complètement le système complet de la commande ssh dans votre configuration. Si vous avez des problèmes, essayez de changer la commande "ssh" en une autre commande aléatoire comme "mycompletetest" et voyez si la complétion fonctionne pour cela.
Notez également que cela effectue le transfert de la zone DNS à chaque achèvement! Si vous l'utilisez beaucoup ou sur un domaine assez statique, il serait judicieux de faire la recherche et d'enregistrer le résultat, puis dans votre fonction de recherche, définissez simplement reply = zone_result.
la source
dig axfr mydomain.com @ns1.mydomain.com
. Assurez-vous que vous pouvez l'exécuter manuellement et qu'une partie de la sortie doit être une liste d'hôtes enregistrés sur ce domaine et leurs enregistrements A ou autres. C'est ce que je recherchais, puis je ne supprimais que la partie du nom d'hôte et non l'enregistrement complet.J'aime garder mon
known_hosts
fichier haché et préfère ne pas l'HashKnownHosts
éteindre. J'avais trouvé que semer ce que @Gilles a avec ce qui est déjà dans mon histoire a été assez efficace pour mes besoins.Aussi, FWIW, c'est ce que j'ai utilisé pour Bash:
la source