Eu tenho alguns servidores configurados ~/.ssh/config
, como alpha
e beta
. Como posso configurar o Bash para que os comandos ssh al<tab>
e o scp file.tgz al<tab>
preenchimento automático dos nomes dos servidores configurados?
Não quero adicionar os servidores a outro arquivo (ou seja, uma matriz Bash) cada vez que um é adicionado, pois adicionamos e removemos servidores regularmente e a lista é bastante grande.
bash
ssh
autocomplete
scp
dotancohen
fonte
fonte
bash-completion
instalado.Respostas:
Encontrei!!
Parece que no Ubuntu as entradas
~/.ssh/known_hosts
estão com hash , então a conclusão do SSH não pode lê-las. Este é um recurso, não um bug. Mesmo adicionandoHashKnownHosts no
ao~/.ssh/config
e/etc/ssh/ssh_config
eu 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:Coloque esse script
/etc/bash_completion.d/ssh
e origine-o com o seguinte comando:Achei este guia inestimável e não seria capaz de escrever isso sem ele. Obrigado Steve Kemp por escrever esse guia fantástico!
fonte
/etc/hosts
, outras distros podem fazer o mesmo.Pré-embalado
Você não diz qual distro está usando, mas no meu sistema Fedora 19 eu tenho o seguinte pacote instalado,
bash-completion
que fornece esse recurso através deste arquivo de regras de conclusão:Aqui está o pacote que eu instalei:
Se você examinar esse arquivo de regras, verá estrofes que estão interrogando o
$HOME/.ssh/config
arquivo:Rolling your own
Eu também encontrei este Gist, known_hosts_autocomplete.sh , que faz algo semelhante, exceto com o
$HOME/.ssh/known_hosts
arquivo.Você poderia fazer algo semelhante usando seu
$HOME/.ssh/config
arquivo se, por algum motivo, não conseguir encontrar o arquivo de regras de conclusão para ossh
pacote pré-instalado.fonte
/usr/share/bash-completion/completions/ssh
. Você poderia postar o arquivo inteiro em algum lugar onde eu possa copiá-lo? Obrigado!/usr/share/bash-completion/completions/ssh
não ajuda! Nem executar ocomplete -W ...
comando no prompt do Bash. Qual pode ser o problema aqui?ssh
ouscp
.Descobri que o preenchimento automático não estava funcionando porque o Ubuntu faz o hash de hosts conhecidos. Você pode adicionar
Para o seu
.ssh/config
arquivo, mas os hosts existentes não terão hash.fonte
~/.ssh/config
e alterei a diretiva/etc/ssh/ssh_config
e removi o~/.ssh/known_hosts
arquivo. Após o login nos servidores novamente, os nomes de host ainda estão sendo salvos em hash..ssh/config
arquivos já terão essa linha. Deixe-me saber se isso funciona.Para habilitar o autocompletar ssh no Debian e Ubuntu:
Observe que isso não tem nada a ver com o hash conhecido_hosts, ao contrário do que foi afirmado acima e da pergunta original. Se você quisesse completar automaticamente a partir de known_hosts, é claro que teria que desativar o hash, mas isso é altamente recomendável.
Por exemplo, eu tenho:
no meu .ssh / config, e ainda tenho o preenchimento automático do ssh funcionando bem nos hosts listados em .ssh / config e / etc / hosts. Você precisa adicionar o host ao .ssh / config como o OP declarou:
Host my-awesome-host Nome do host the.real.host.name
(Ou você pode adicionar uma entrada de host ao / etc / hosts, que é outra fonte para os scripts Debian / Ubuntu.)
Em seguida, basta digitar
ssh my-awe<tab>
e ele será concluído automaticamente. Novamente, isso é mesmo se você HashKnownHosts, o que é altamente recomendado. (Observe que a conclusão do bash precisa estar ativada no seu shell do bash, e você precisa especificamente ter esses scripts instalados como acima para sua distribuição.)Em seguida, adicione essas linhas ao seu
.bashrc
para habilitá-lo (requer um logout e login novamente, ou apenas um novobash
digitado para iniciar um novo shell (você não precisa habilitá-lo se ele já estiver ativado/etc/bash.bashrc
e nas/etc/profile
fontes/etc/bash.bashrc
).Isso permitirá autocompletion ssh (entre outras coisas!) De
~/.ssh/config
,/etc/hosts
, etc.Note que o Debian assume como padrão ash em vez de bash. Você pode alternar para o bash facilmente:
(Você precisará sair e fazer login novamente para que isso entre em vigor.)
fonte
No Ubuntu 14.04,
ssh
os servidores são preenchidos automaticamente mencionados no seu~/.ssh/config
Percebi quando percebi que apenas um dos servidores que eu normalmente acessava era preenchido automaticamente. A única diferença entre os dois era uma entrada no arquivo de configuração ssh relacionada à autenticação. Quando adicionei uma nova entrada ao arquivo de configuração para o outro servidor, ele também foi concluído automaticamente.
Aqui está a entrada para aqueles que estavam perguntando:
Eu ficaria muito surpreso se isso importasse o que você estava especificando na configuração (desde que ainda seja válido, é claro).
fonte