Perché alcune sessioni ssh offrono il completamento automatico e altre no?


10

Domanda per principianti!

Sto inviando due server diversi, entrambi parte dello stesso cluster Amazon AWS. Non sono gestiti da me.

In una sessione ssh, il terminale mi consente di completare automaticamente. Nell'altra sessione, non lo fa - vorrei che lo facesse.

Perché è questo: è un'opzione impostata dall'amministratore del server?

E posso farci qualcosa?

Grazie!

Risposte:


15

Questa non è davvero una domanda di programmazione, ma ha a che fare con la tua shell. Puoi provare ad avviare la bashshell (digitando bashal prompt) e vedere se riesci a completare automaticamente.

Se funziona, puoi usarlo which bashper verificare la sua posizione e quindi chsh -s /bin/bashimpostare la shell in modo permanente.

Un elenco di shell disponibili è disponibile anche in /etc/shells.


Non posso cambiare la mia shell per qualche motivo. C'è un modo per farlo come root? You may not change the shell for 'counterstrike'.
Tomáš Zato - Ripristina Monica il

3

È una combinazione della shell che viene utilizzata nella sessione ssh e della sua configurazione.

Sebbene la shell possa supportare il completamento automatico, potrebbe non essere configurata per questo. Se si utilizza la shell bash, è possibile modificare il file .bashrc locale affinché fornisca il completamento automatico.

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

1
Il pacchetto di completamento bash è necessario solo per il completamento più avanzato di cose come le opzioni della riga di comando, i nomi dei server, le directory del repository VCS, .... Il completamento di comandi, directory, nomi di file, variabili e nomi utente funziona senza di essa.
ak2,

2

Copiato dalla mia risposta su unix.SE :

Sembra che specificamente in Ubuntu le voci in ~/.ssh/known_hostssiano sottoposte a hash , quindi il completamento di SSH non può leggerle. Questa è una funzione, non un bug. Anche aggiungendo HashKnownHosts noa ~/.ssh/confige /etc/ssh/ssh_confignon sono riuscito a impedire l'hash dell'host.

Tuttavia, si trovano anche gli host a cui sono interessato ~/.ssh/config. Ecco uno script per il completamento di Bash che legge le voci da quel file:

_ssh() 
{
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts=$(grep '^Host' ~/.ssh/config | awk '{print $2}')

    COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
    return 0
}
complete -F _ssh ssh

Inserire quello script /etc/bash_completion.d/sshe quindi sorgente con il seguente comando:

$ . /etc/bash_completion.d/ssh

Ho trovato questa guida preziosa e non avrei potuto scriverla senza di essa. Grazie Steve Kemp per aver scritto quella fantastica guida!


1

IIRC potrebbe anche essere un problema che ssh esegue l'hashing dei nomi host in ~ / .ssh / known_hosts

la maggior parte delle installazioni che conosco usano ~ / .ssh / known_hosts come sorgente per l'elenco degli host disponibili per il completamento, ma alcuni sistemi hanno anche iniziato a impostare "HashKnownHosts yes", che proibisce l'uso di known_hosts come sorgente ....

se le tue linee di host conosciute iniziano con qualcosa del genere

|1|BWO5qDxk/cFH0wa05JLdHn+j6xQ=|rXQvIxh5cDD3C4

quindi viene attivato l'hash.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.