Tengo algunos servidores configurados ~/.ssh/config
, como alpha
y 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-completion
instalado.Respuestas:
¡¡Lo encontré!!
Parece que en Ubuntu las entradas
~/.ssh/known_hosts
está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 no
a~/.ssh/config
, y/etc/ssh/ssh_config
no 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/ssh
y 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-completion
que 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/config
archivo:Rodando el tuyo
También encontré este Gist, known_hosts_autocomplete.sh , que hace algo similar excepto con el
$HOME/.ssh/known_hosts
archivo.Podría hacer algo similar usando su
$HOME/.ssh/config
archivo si por alguna razón no puede encontrar el archivo de regla de finalización para elssh
paquete 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/ssh
no ayuda! Tampoco ejecuta elcomplete -W ...
comando desde el indicador Bash. ¿Cuál podría ser el problema aquí?ssh
oscp
.Descubrí que el autocompletado no funcionaba porque Ubuntu hackea hosts conocidos. Puedes añadir
A su
.ssh/config
archivo, pero los hosts existentes no se eliminarán.fuente
~/.ssh/config
y cambié la directiva/etc/ssh/ssh_config
, y eliminé el~/.ssh/known_hosts
archivo. Después de volver a iniciar sesión en los servidores, los nombres de host todavía se guardan en hash..ssh/config
archivos 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
.bashrc
para habilitarlo (requiere cerrar sesión y volver a iniciar sesión, o simplemente un nuevobash
tipo para iniciar un nuevo shell. (No necesita habilitarlo si ya está habilitado en/etc/bash.bashrc
y/etc/profile
fuentes/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,
ssh
completa automáticamente los servidores mencionados en su~/.ssh/config
Me 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