PM ! dixit Jhiday    —  Agenfan

Discussions

Autocompletion et ssh sont dans un bateau...

Tchou 3587 Bob
...et je vais en balancer un à l'eau tellement ça me nifle depuis des mois !

*keuf* *keuf* Bonjour les amiches, j'ai une question ! :)

J'ai un petit truc qui me gonfle depuis que j'ai switché définitivement sous linux au boulot (mon fameux mac pro 2008 a fini par être réformé au bout de dix ans de bons et loyaux services), c'est le comportement erratique de l'autocomplétion liée à ssh. Je n'arrive pas à comprendre comment jouer dessus.

Je m'explique : si je fais "ssh p[tab]", j'ai comme résultat :
fred ➤ ssh p                                                                                   [9:50:10]
plu.[censure] proxy pub[censure]-test
En sachant que ça me gonfle surtout quand je fais pub[tab], car il me met automatiquement sur un serveur de test, alors que dans 90% des cas c'est sur celui de prod que je dois aller.

"oui, mais t'es un boulet, t'utilise zsh et pas bash". Ok, j'entends la remarque, donc faisons le test en bash :
fred ➤ bash                                                                                    [9:55:17]
fred@DSIT-FredC:~$ ssh p
plu.[censure] prod pub[censure]-test
Tiens, étrange, c'est presque la même chose (en plus douloureux vu que zsh est quand même foutrement mieux fait pour l'autocomplete), sauf que "proxy" est remplacé par "prod". Whaaaat ? Ok, donc, changer de shell change un peu le résultat, mais ça reste étrange.

Alors, "proxy", c'est un machin chelou que j'avais fait il y a des mois, pour des raisons complexes de débug je m'étais fait un proxy sur moi-même (je me ssh-isait sur la même machine pour faire de la translation de port, une bidouille dégueu mais qui a marché et dont je me suis servi une heure). ce fut donc un nom dans mon /etc/hosts pendant une heure il y a au moins 6 mois. Il n'existe même plus dans mon .zsh_history
"prod", c'est un alias ssh présent dans .ssh/config . Je m'en sers fréquemment.
"pub[censure]-test" est présent dans mon /etc/hosts
"plu.untruc", c'est un nom de domaine fourni par le serveur dns, il n'est pas dans le /etc/hosts. Et je pense jamais avoir utilisé ce nom pour me logguer en ssh, j'aurais utilisé le nom de machine (gotland). Et du coup, je suis allé vérifier, et l'unique fois où ce nom est présent avec "ssh", c'est un repertoire et pas une machine, lors d'un sshfs (et non, je n'ai jamais utilisé sshfs avec pub[censure]) : sshfs [nom_user]@gotland:/var/www/plu.[censure]/..../ ~/mntpoint


Alors, pour corriger ça, parce que je suis un gros faignant et que supprimer -test à chaque fois que j'utilise ma commande me gonfle, j'ai donc tenté de supprimer le pub[censure]-test de mon /etc/hosts, puis de mon .ssh/known_hosts ... peine perdue, il était encore là. Il n'est nulle part dans le répertoire .ssh. Changer de shell ne change rien comme vous avez pu le voir, et ce n'est pas un truc présent dans le .zsh_history ou le .bash_history

Est-ce que vous auriez une idée d'où chercher. Ça m'énerve de ne pas comprendre ça ! :)
Guybrush 8429 Bob
Les scripts qui régissent ce qui peut/doit être autocomplété sont normalement dans /usr/share/bash-completion/completions. Je viens de jeter un oeil à celui correspondant à ssh, et il semble qu'il se base sur le contenu des known hosts ainsi que de pas mal d'autres trucs. Difficile de savoir exactement d'où peut venir ton "cas" spécifique :-/
Fabe 610 Geek
Des entrées dans un ~/.ssh/config ?
Tchou 3587 Bob
Oui, j'ai des entrées dans .ssh/config, mais pas celles-là :
Host test
Hostname serveurlamp-comm
User [censure]

Host prod
Hostname mujeres
User [censure]

Host *
User [censure]
Le host * me permet d'éviter de préciser le nom d'user en règle générale.

Le .known_hosts est rempli (41 lignes, 41 machines :) ), comme précisé auparavant, mais j'avais cramé le nom de machine puis retesté sans succès :
ssh-keygen -R pub[censure]-test
Guybrush 8429 Bob
Y a pas une histoire de cache ou quelque chose comme ça, tu as relancé ton terminal/session entre deux juste pour être sûr ? Vu le script dans bash-completion, je ne suis pas sûr qu'il soit nécessaire de "sourcer" pour autant.
Tchou 3587 Bob
Pardon...

Alors, bien vu, je ne me souviens pas si j'avait relancé le shell l'autre fois. J'ai re-effacé la ligne dans mon known_hosts, mais vu que tenter d'effacer "proxy" me dit que ce nom est inexistant dedans, j'ai un gros doute. Je regarderai au prochain reboot, mais je serai foutrement étonné que ça marche.
Fabe 610 Geek
TchouOui, j'ai des entrées dans .ssh/config, mais pas celles-là :
Attention il peut y en avoir plusieurs, généralement, il y en a au moins un global dans /etc/ssh/ssh_config.

Répondre

Vous devez être inscrit et identifié.