Tengo algunos servidores configurados ~/.ssh/config, como alphay beta. ¿Cómo puedo configurar Bash de modo que los comandos ssh al<tab>y scp file.tgz al<tab>autocompletar los nombres de los servidores configurados?
No quiero agregar los servidores a otro archivo (es decir, una matriz Bash) cada vez que se agrega uno, ya que agregamos y eliminamos servidores regularmente y la lista es bastante grande.
bash
ssh
autocomplete
scp
dotancohen
fuente
fuente

bash-completioninstalado.Respuestas:
¡¡Lo encontré!!
Parece que en Ubuntu las entradas
~/.ssh/known_hostsestán en hash , por lo que la finalización de SSH no puede leerlas. Esto es una característica, no un error. Incluso mediante la adiciónHashKnownHosts noa~/.ssh/config, y/etc/ssh/ssh_configno pude evitar que el hash de acogida.Sin embargo, los hosts que me interesan también se encuentran en
~/.ssh/config. Aquí hay un script para Bash Completion que lee las entradas de ese archivo:Ponga ese script
/etc/bash_completion.d/sshy luego fuente con el siguiente comando:Encontré esta guía invaluable y no habría podido escribir esto sin ella. ¡Gracias Steve Kemp por escribir esa excelente guía!
fuente
/etc/hosts, otras distribuciones pueden hacer lo mismo.Preenvasado
No dice qué distribución está utilizando, pero en mi sistema Fedora 19 tengo instalado el siguiente paquete,
bash-completionque proporciona esta función a través de este archivo de reglas de finalización:Aquí está el paquete que he instalado:
Si observa ese archivo de reglas, verá las estrofas que interrogan al
$HOME/.ssh/configarchivo:Rodando el tuyo
También encontré este Gist, known_hosts_autocomplete.sh , que hace algo similar excepto con el
$HOME/.ssh/known_hostsarchivo.Podría hacer algo similar usando su
$HOME/.ssh/configarchivo si por alguna razón no puede encontrar el archivo de regla de finalización para elsshpaquete previamente.fuente
/usr/share/bash-completion/completions/ssh. ¿Podría publicar ese archivo completo en algún lugar donde pueda copiarlo? ¡Gracias!/usr/share/bash-completion/completions/sshno ayuda! Tampoco ejecuta elcomplete -W ...comando desde el indicador Bash. ¿Cuál podría ser el problema aquí?sshoscp.Descubrí que el autocompletado no funcionaba porque Ubuntu hackea hosts conocidos. Puedes añadir
A su
.ssh/configarchivo, pero los hosts existentes no se eliminarán.fuente
~/.ssh/configy cambié la directiva/etc/ssh/ssh_config, y eliminé el~/.ssh/known_hostsarchivo. Después de volver a iniciar sesión en los servidores, los nombres de host todavía se guardan en hash..ssh/configarchivos ya tendrán esta línea. Avísame si eso funciona.Para habilitar el autocompletado ssh en Debian y Ubuntu:
Tenga en cuenta que esto no tiene nada que ver con el hash conocido_hosts, al contrario de lo que se indicó anteriormente y la pregunta original. Si desea completar automáticamente desde conocido_hosts, entonces, por supuesto, tendría que deshabilitar el hashing, pero eso es muy recomendable.
Por ejemplo, tengo:
en mi .ssh / config, y todavía tengo la finalización automática de ssh funcionando bien con los hosts enumerados en .ssh / config y / etc / hosts. Es necesario agregar el host a .ssh / config como lo indica el OP:
Host my-awesome-host Nombre de host the.real.host.name
(O bien, puede agregar una entrada de host a / etc / hosts, que es otra fuente para los scripts de Debian / Ubuntu).
Luego, simplemente puede escribir
ssh my-awe<tab>y se completará automáticamente. De nuevo, esto es incluso si tienes HashKnownHosts, lo cual es muy recomendable. (Tenga en cuenta que la finalización de bash debe estar habilitada en su shell de bash, y debe tener específicamente esos scripts instalados como se indica arriba para su distribución).Luego, agregue estas líneas a su
.bashrcpara habilitarlo (requiere cerrar sesión y volver a iniciar sesión, o simplemente un nuevobashtipo para iniciar un nuevo shell. (No necesita habilitarlo si ya está habilitado en/etc/bash.bashrcy/etc/profilefuentes/etc/bash.bashrc).Esto permitirá a la terminación automática ssh (entre otras cosas!) De
~/.ssh/config,/etc/hosts, etc.Tenga en cuenta que Debian por defecto es ash en lugar de bash. Puedes cambiar a bash fácilmente:
(Deberá cerrar sesión y volver a iniciarla para que esto surta efecto).
fuente
En Ubuntu 14.04,
sshcompleta automáticamente los servidores mencionados en su~/.ssh/configMe di cuenta cuando me di cuenta de que solo uno de los servidores a los que comúnmente accedo se completa automáticamente. La única diferencia entre los dos era una entrada en el archivo de configuración ssh relacionada con la autenticación. Cuando agregué una nueva entrada al archivo de configuración para el otro servidor, también comenzó a completarse automáticamente.
Aquí está la entrada para los que preguntaban:
Me sorprendería mucho si importara lo que estaba especificando en la configuración (siempre que siga siendo válido, por supuesto).
fuente