On Mon, Feb 22, 2010 at 02:09:15PM +0100, Vincent Lefevre wrote:
> When I do "ssh pru[TAB]", ssh completes to a non-resolvable hostname
> from the .ssh/known_hosts file: prunille.vinc17.org
>
> In fact this machine is resolvable only from my local network, and
> it is an error to assume that a host key in .ssh/known_hosts is
> necessarily resolvable (it may be there just to check the key thanks
> to a HostKeyAlias declaration). IMHO, if the key is listed as an alias
> from .ssh/config but not as a Host identifier, it should be discarded.
> Hosts from .ssh/config should be used instead. The algorithm would be:
>
> 1. Take all host identifiers after Host declarations from .ssh/config
>(strings with '?' and/or '*' should not be taken into account).
> 2. Add all hosts from .ssh/known_hosts that are not an argument of
>a HostKeyAlias declaration (if hosts are in fact hashes, due to
>HashKnownHosts, they should not be taken into account).
>
> For instance, if .ssh/config has:
>
> Host myhost
> HostKeyAlias my-real-host-name.mydomain
> Hostname gateway.mydomain
> Port 12345
>
> then "ssh my[TAB]" should complete to myhost only.
>
> Of course, as a workaround to the current behavior, the user could
> write:
>
> Host myhost my-real-host-name.mydomain
> HostKeyAlias my-real-host-name.mydomain
> Hostname gateway.mydomain
> Port 12345
>
> but this can make maintenance of the config file less easy.
One other potentially-complicated issue is the known_hosts file
gaining syntax in the form of
[localhost]:,[127.0.0.1]: ssh-rsa keyfingerprintblahblah id
resulting in tab completion of \[localhost\]: as a host.
I'm sure there is a better solution, but dropping entries with brackets
seems like an improvement over the status quo.
Index: Completion/Unix/Type/_hosts
===
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Type/_hosts,v
retrieving revision 1.10
diff -u -r1.10 _hosts
--- Completion/Unix/Type/_hosts 5 Apr 2006 10:04:32 - 1.10
+++ Completion/Unix/Type/_hosts 28 Feb 2010 21:35:11 -
@@ -41,9 +41,9 @@
for khostfile in $khostfiles; do
if [[ -r $khostfile ]]; then
-khosts=(${(s:,:)${(j:,:)${(u)${(f)"$(<$khostfile)"}%%[ |#]*}}})
+khosts=(${${(s:,:)${(j:,:)${(u)${(f)"$(<$khostfile)"}%%[
|#]*}}}:#*[\[\]]*})
if [[ -z $useip ]]; then
-
khosts=(${${khosts:#(#s)[0-9]##.[0-9]##.[0-9]##.[0-9]##(#e)}:#(#s)[0-9a-f:]##(#e)})
+
khosts=(${${${khosts:#(#s)[0-9]##.[0-9]##.[0-9]##.[0-9]##(#e)}:#(#s)[0-9a-f:]##(#e)}:#*[\[\]]*})
fi
_cache_hosts+=($khosts)
fi
--
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org