J'ai quelques serveurs configurés ~/.ssh/config
, tels que alpha
et beta
. Comment pourrais-je configurer Bash de telle sorte que les commandes ssh al<tab>
et la scp file.tgz al<tab>
saisie automatique des noms des serveurs configurés?
Je ne veux pas ajouter les serveurs à un autre fichier (c'est-à-dire un tableau de Bash) à chaque fois qu'un fichier est ajouté, car nous ajoutons et retirons des serveurs régulièrement et la liste est assez longue.
bash
ssh
autocomplete
scp
dotancohen
la source
la source
bash-completion
installé.Réponses:
Je l'ai trouvé !!
Il semble que dans Ubuntu les entrées
~/.ssh/known_hosts
soient hachées , l’achèvement de SSH ne peut donc pas les lire. Ceci est une fonctionnalité, pas un bug. Même en ajoutantHashKnownHosts no
à~/.ssh/config
et/etc/ssh/ssh_config
je ne pouvais pas empêcher le hashing hôte.Cependant, les hôtes qui m'intéressent se trouvent également dans
~/.ssh/config
. Voici un script pour Bash Completion qui lit les entrées de ce fichier:Placez ce script
/etc/bash_completion.d/ssh
et sourcez-le avec la commande suivante:J’ai trouvé ce guide inestimable et je n’aurais pas pu écrire ce scénario sans lui. Merci Steve Kemp d' avoir écrit ce guide formidable!
la source
/etc/hosts
, d'autres distributions peuvent faire de même.Pré-emballé
Vous ne dites pas quelle distribution vous utilisez, mais sur mon système Fedora 19, j'ai installé le paquet suivant,
bash-completion
qui fournit cette fonctionnalité via ce fichier de règle de complétion:Voici le paquet que j'ai installé:
Si vous parcourez ce fichier de règles, vous verrez des strophes interrogeant le
$HOME/.ssh/config
fichier:Rouler le vôtre
J'ai aussi trouvé ce Gist, known_hosts_autocomplete.sh , qui fait quelque chose de similaire sauf avec le
$HOME/.ssh/known_hosts
fichier.Vous pouvez faire quelque chose de similaire en utilisant votre
$HOME/.ssh/config
fichier si, pour une raison quelconque, vous ne parvenez pas à trouver le fichier de règle de complétion pourssh
déjà pré-emballé.la source
/usr/share/bash-completion/completions/ssh
. Pourriez-vous poster ce fichier entier quelque part que je pourrais le copier? Merci!/usr/share/bash-completion/completions/ssh
n'aide pas! L'exécution de lacomplete -W ...
commande à partir de l'invite Bash non plus. Quel pourrait être le problème ici?ssh
ouscp
.J'ai constaté que l'auto-complétion ne fonctionnait pas car Ubuntu hachait des hôtes connus. Vous pouvez ajouter
Pour votre
.ssh/config
fichier, mais les hôtes existants ne seront pas décomposés.la source
~/.ssh/config
et modifié cette directive/etc/ssh/ssh_config
, et j'ai supprimé le~/.ssh/known_hosts
fichier. Après avoir reconnecté les serveurs, les noms d’hôte sont toujours en cours de sauvegarde..ssh/config
fichiers contiendraient déjà cette ligne. Faites-moi savoir si cela fonctionne.Pour activer l'auto-complétion ssh dans Debian et Ubuntu:
Notez que cela n’a absolument rien à voir avec le hashage de known_hosts, contrairement à ce qui a été dit plus haut et à la question initiale. Si vous souhaitez compléter automatiquement à partir de known_hosts, vous devez bien sûr désactiver le hachage, mais cela est fortement déconseillé.
Par exemple, j'ai:
dans mon fichier .ssh / config et que l'auto-complétion ssh fonctionne toujours très bien contre les hôtes répertoriés dans .ssh / config et / etc / hosts. Vous devez ajouter l'hôte à .ssh / config comme l'OP a déclaré:
Hôte my-awesome-host Hostname the.real.host.name
(Vous pouvez également ajouter une entrée d'hôte à / etc / hosts, qui est une autre source pour les scripts Debian / Ubuntu.)
Ensuite, vous pouvez simplement taper
ssh my-awe<tab>
et il sera complété automatiquement. Encore une fois, cela se produit même si vous utilisez HashKnownHosts, ce qui est vivement recommandé. (Notez que l'achèvement de bash doit être activé dans votre shell bash et que ces scripts doivent être installés spécifiquement comme ci-dessus pour votre distribution.)Ajoutez ensuite ces lignes à votre
.bashrc
pour l'activer (nécessite une déconnexion et une nouvelle connexion, ou tout simplement un nouveaubash
saisi pour lancer un nouveau shell. (Vous n'avez pas besoin d'activer s'il est déjà activé dans/etc/bash.bashrc
et les/etc/profile
sources/etc/bash.bashrc
).Cela permettra autocomplétion ssh (entre autres!) De
~/.ssh/config
,/etc/hosts
etc.Notez que Debian utilise par défaut cendré au lieu de bash. Vous pouvez passer à bash facilement:
(Vous devrez vous déconnecter et vous reconnecter pour que cela prenne effet.)
la source
Sur Ubuntu 14.04, l’
ssh
auto-complétion des serveurs mentionnés dans votre~/.ssh/config
Je l'ai remarqué lorsque j'ai réalisé qu'un seul des serveurs auquel j'accède habituellement est rempli automatiquement. La seule différence entre les deux était une entrée dans le fichier de configuration ssh liée à l'authentification. Lorsque j'ai ajouté une nouvelle entrée au fichier de configuration pour l'autre serveur, la saisie automatique a également commencé.
Voici l'entrée pour ceux qui demandaient:
Je serais très surpris si cela importait ce que vous spécifiez dans la configuration (tant que cela est toujours valable, bien sûr).
la source