¿Por qué algunas sesiones ssh ofrecen autocompletar y otras no?

10

Muy nueva pregunta!

Estoy enviando a dos servidores diferentes, ambos parte del mismo clúster de Amazon AWS. No están dirigidos por mí.

En una sesión ssh, el terminal me permite completar automáticamente. En la otra sesión, no lo hace, ojalá lo hiciera.

¿Por qué es esto? ¿Es una opción establecida por el administrador del servidor?

¿Y puedo hacer algo al respecto?

¡Gracias!


fuente

Respuestas:

15

Esta no es realmente una pregunta de programación, pero tiene que ver con su shell. Puede intentar iniciar el bashshell (escribiendo bashen el indicador) y ver si puede autocompletar.

Si eso funciona, puede usarlo which bashpara verificar su ubicación y luego chsh -s /bin/bashconfigurar su shell permanentemente.

También se puede encontrar una lista de conchas disponibles en /etc/shells.

Brad Mace
fuente
No puedo cambiar mi caparazón por alguna razón. ¿Hay alguna manera de hacerlo como root? You may not change the shell for 'counterstrike'.
Tomáš Zato - Restablece a Mónica el
3

Es una combinación del shell que se está utilizando en su sesión ssh, así como su configuración.

Si bien su shell puede admitir autocompletado, es posible que no esté configurado para ello. Si está utilizando el shell bash, puede editar su archivo .bashrc local para lo siguiente para proporcionar autocompletar.

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi
daemonofchaos
fuente
1
El paquete de finalización de bash solo es necesario para la finalización más avanzada de cosas como opciones de línea de comandos, nombres de servidor, directorios de repositorio de VCS, .... La finalización de comandos, directorios, nombres de archivo, variables y nombres de usuario funciona sin ella.
ak2
2

Copiado de mi propia respuesta en unix.SE :

Parece que específicamente 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ón HashKnownHosts 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:

_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

Ponga ese script /etc/bash_completion.d/sshy luego fuente con el siguiente comando:

$ . /etc/bash_completion.d/ssh

Encontré esta guía invaluable y no habría podido escribir esto sin ella. ¡Gracias Steve Kemp por escribir esa excelente guía!

dotancohen
fuente
1

IIRC también podría ser un problema que ssh agrega los nombres de host en ~ / .ssh / known_hosts

La mayoría de las instalaciones que conozco usan ~ / .ssh / known_hosts como fuente para la lista de hosts disponibles para completar, pero algunos sistemas también comenzaron a configurar "HashKnownHosts yes", que prohíbe el uso de known_hosts como fuente ...

si sus líneas de hosts conocidos comienzan con algo como

|1|BWO5qDxk/cFH0wa05JLdHn+j6xQ=|rXQvIxh5cDD3C4

entonces se activa el hashing.

Marcel G
fuente