Il completamento della scheda per gli host definiti in ~ / .ssh / config non funziona più su Yosemite

30

Sto cercando di creare il mio file ~/.ssh/config per semplificare la mia vita lavorativa sulla connessione al server.

In Mavericks funzionavano tutti correttamente e con la scheda ero in grado di completare automaticamente il nome host con un file come questo:

Host test-host-name
    HostName 192.168.1.2
    User root

La stessa configurazione su Yosemite ha un comportamento diverso. Quando digito ssh t sulla shell la scheda non completa automaticamente il nome host.

Qualcuno sa se qualcosa è cambiato in Yosemite e ora ho bisogno di fare qualcosa per farlo funzionare?

    
posta RikyTres 20.01.2015 - 10:39
fonte

5 risposte

26

Puoi abilitare il completamento della shell bash installando bash-completion tramite brew :

brew install bash-completion

Quindi aggiungi quanto segue al tuo ~/.bash_profile :

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

Source

(Modifica: brew tap homebrew/completions è deprecato dal 2018.)

    
risposta data 05.10.2015 - 17:59
fonte
11

Presumo che la shell del tuo Mac sia bash.

Devi completare il comando ssh, per maggiori dettagli puoi leggere 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

Non dimenticare che devi source del file per caricare il nuovo comando nel tuo terminale. oppure Puoi inserire questo codice in .bash_profile

    
risposta data 20.01.2015 - 13:23
fonte
1

Da questo articolo su MacWorld .

Copia / incolla quanto segue in ~/.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

Dovrai quindi riavviare il tuo terminale o digitare source ~/.bash_profile (nota che quest'ultimo funzionerà solo nella tua scheda attuale).

    
risposta data 29.03.2016 - 04:35
fonte
0

Per vostra informazione, non sono sicuro di come rispondere direttamente alla risposta di nelson dato che non ho ancora abbastanza reputazione per commentare ancora, ma sulla mia macchina che esegue El Capitan, ^M è stato aggiunto a tutti i nomi host dal mio file di configurazione. Ho dovuto aggiungere \r alla mia variabile $IFS o rimuovere / sostituire tutte le istanze di \r dall'output del secondo cat . Alla fine, ho fatto il secondo aggiungendo tr '\r' '\n' per rendere questa catena di comando simile a questa:

cat ~/.ssh/config | \
        grep "^Host " | \
        awk '{print $2}' | \
        tr '\r' '\n'
    
risposta data 10.10.2016 - 19:52
fonte
-1

Puoi aggiungere voci in / etc / hosts e usarle nel completamento automatico del nome host:

"ssh @" + [TAB]

Il riavvio è richiesto per il sistema per ricaricare questo file.

    
risposta data 06.05.2018 - 09:34
fonte

Leggi altre domande sui tag