Por que algumas sessões ssh oferecem preenchimento automático e outras não?


10

Muito novato pergunta!

Estou transferindo para dois servidores diferentes, ambos parte do mesmo cluster do Amazon AWS. Eles não são dirigidos por mim.

Em uma sessão ssh, o terminal permite o preenchimento automático. Na outra sessão, não - gostaria que sim.

Por que isso - é uma opção definida pelo administrador do servidor?

E posso fazer algo sobre isso?

obrigado!

Respostas:


15

Esta não é realmente uma questão de programação, mas tem a ver com o seu shell. Você pode tentar iniciar o bashshell (digitando bashno prompt) e veja se é possível concluir automaticamente.

Se isso funcionar, você pode usar which bashpara verificar sua localização e chsh -s /bin/bashdefinir seu shell permanentemente.

Uma lista de conchas disponíveis também pode ser encontrada em /etc/shells.


Não posso mudar minha concha por algum motivo. Existe maneira de fazê-lo como root? You may not change the shell for 'counterstrike'.
Tomáš Zato - Restabelecer Monica

3

É uma combinação do shell que está sendo usado na sua sessão ssh e também na sua configuração.

Embora seu shell ofereça suporte ao preenchimento automático, ele pode não estar configurado para ele. Se você estiver usando o shell bash, poderá editar o arquivo .bashrc local para o seguinte, para fornecer o preenchimento automático.

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

1
O pacote de conclusão do bash é necessário apenas para a conclusão mais avançada de coisas como opções de linha de comando, nomes de servidores, diretórios de repositório VCS, .... A conclusão de comandos, diretórios, nomes de arquivos, variáveis ​​e nomes de usuários funciona sem ele.
AK2

2

Copiado da minha própria resposta no unix.SE :

Parece que, especificamente no Ubuntu, as entradas ~/.ssh/known_hostssão hash , para que a conclusão do SSH não possa ser lida. Este é um recurso, não um bug. Mesmo adicionando HashKnownHosts noao ~/.ssh/confige /etc/ssh/ssh_configeu era incapaz de impedir o hashing host.

No entanto, os anfitriões em que estou interessado também são encontrados ~/.ssh/config. Aqui está um script para o Bash Completion que lê as entradas desse arquivo:

_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

Coloque esse script /etc/bash_completion.d/sshe origine-o com o seguinte comando:

$ . /etc/bash_completion.d/ssh

Achei este guia inestimável e eu não seria capaz de escrever isso sem ele. Obrigado Steve Kemp por escrever esse guia fantástico!


1

IIRC também pode ser um problema que o ssh faz o hash dos nomes de host em ~ / .ssh / known_hosts

a maioria das instalações que conheço usam ~ / .ssh / known_hosts como fonte para a lista de hosts disponíveis para conclusão, mas alguns sistemas também começaram a definir "HashKnownHosts yes", que proíbe o uso de known_hosts como fonte ....

se suas linhas conhecidas de hosts começarem com algo como

|1|BWO5qDxk/cFH0wa05JLdHn+j6xQ=|rXQvIxh5cDD3C4

o hash é ativado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.