La finalización de la pestaña para los hosts definidos en ~ / .ssh / config ya no funciona en Yosemite

30

Estoy intentando crear mi archivo ~/.ssh/config para simplificar mi vida laboral en la conexión del servidor.

En Mavericks todo funcionó correctamente y con la pestaña pude completar automáticamente el nombre de host con este archivo:

Host test-host-name
    HostName 192.168.1.2
    User root

La misma configuración en Yosemite tiene un comportamiento diferente. Cuando escribo ssh t en el shell, la pestaña no completa automáticamente el nombre de host.

¿Alguien sabe si algo ha cambiado en Yosemite y ahora necesito hacer algo para que funcione?

    
pregunta RikyTres 20.01.2015 - 10:39

5 respuestas

26

Puede habilitar la finalización del shell bash instalando bash-completion a través de brew :

brew install bash-completion

Luego agrega lo siguiente a tu ~/.bash_profile :

if [ -f $(brew --prefix)/etc/bash_completion ]; then
. $(brew --prefix)/etc/bash_completion
fi

Source

(Edición: brew tap homebrew/completions está en desuso a partir de 2018.)

    
respondido por el Danny Armstrong 05.10.2015 - 17:59
11

Supongo que el shell de tu Mac es bash.

Necesitas completar el comando ssh, para más detalles puedes leer man complete

_complete_ssh_hosts ()
{
        COMPREPLY=()
        cur="${COMP_WORDS[COMP_CWORD]}"
        comp_ssh_hosts='cat ~/.ssh/known_hosts | \
                        cut -f 1 -d ' ' | \
                        sed -e s/,.*//g | \
                        grep -v ^# | \
                        uniq | \
                        grep -v "\[" ;
                cat ~/.ssh/config | \
                        grep "^Host " | \
                        awk '{print $2}'
                '
        COMPREPLY=( $(compgen -W "${comp_ssh_hosts}" -- $cur))
        return 0
}
complete -F _complete_ssh_hosts ssh

No olvide que necesita source el archivo para obtener el nuevo comando para cargar en su terminal. o puedes poner este código en .bash_profile

    
respondido por el nelson 20.01.2015 - 13:23
1

De este artículo en MacWorld .

Copie / pegue lo siguiente en ~/.bash_profile :

complete -o default -o nospace -W "$(/usr/bin/env ruby -ne 'puts $_.split(/[,\s]+/)[1..-1].reject{|host| host.match(/\*|\?/)} if $_.match(/^\s*Host\s+/);' < $HOME/.ssh/config)" scp sftp ssh

Luego tendrás que reiniciar tu terminal o escribir source ~/.bash_profile (ten en cuenta que este último solo funcionará en tu pestaña actual).

    
respondido por el beef_boolean 29.03.2016 - 04:35
0

Para tu información, no estoy seguro de cómo responder directamente a la respuesta de Nelson, ya que todavía no he construido suficiente reputación para comentarlo, pero en mi máquina que ejecuta El Capitán, ^M se estaba agregando a todos los nombres de host de mi archivo de configuración. Tuve que agregar \r a mi variable $IFS o eliminar / sustituir todas las instancias de \r de la salida del segundo cat . Al final, hice esto último agregando tr '\r' '\n' para hacer que la cadena de comandos se vea así:

cat ~/.ssh/config | \
        grep "^Host " | \
        awk '{print $2}' | \
        tr '\r' '\n'
    
respondido por el Ian Bui 10.10.2016 - 19:52
-1

Puede agregar entradas en / etc / hosts y usarlas en autocompletar con el nombre de host:

"ssh @" + [TAB]

Se requiere reiniciar para que el sistema vuelva a cargar este archivo.

    
respondido por el lukdz 06.05.2018 - 09:34

Lea otras preguntas en las etiquetas