Autocompletar nomes de host ao usar o SSH no arquivo de histórico

1

Estou procurando um recurso que me ajude a preencher automaticamente os servidores que eu "sshed" em algum momento e que estejam no meu arquivo .bash_history sem mexer no arquivo known_hosts ou /etc/bash_completition , apenas pegue-os em history .

Não consigo mexer no arquivo known_hosts , porque as informações contidas nele são como "criptografadas" e como evitar isso não é tão importante.

por exemplo,

$ tail -n 2 ~/.ssh/known_hosts
|1|D90I41jNxFy83ZhAoyG7gj0+LpM=|Zkru+0Yi9Q9UNafHpj1IVMGGnAw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArih5PrEeGsMHm+9ytkiiOgNNIh6fQAEFfdDw9IwkOGs13g+YN6k61rRbdXj97N+vvuGslcCL9uDMY+M6bqDX4k2kGJuvmsSBgIWOjOiOtrW6wWaflGO0OKQ39F1R92Bw3gB1kNg8Es3XjNE1D+CRXt/EQLWLBFmF3p41PpoRg/Gyvw4XqQSMOYdGsr0OaE8ozrXWO2rQo2NDe6BDJzSGqZ234jCtnRLEtFBFvisTEbNCYFRkhKMSfrUecyK5bjHRehEHKfsPxNDTCOl7xrx1DDTng/BIgxyCA21s+xa05oNulkMMd/1qNrekoUUFxwJpb1rf6vrW5CkeMIOhCr5Nxw==
|1|Cl6c716uEoPmovaRDDwkM+bYFTc=|VXUrsTRDptMOg/Nm3anFMwjy5O8= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArih5PrEeGsMHm+9ytkiiOgNNIh6fQAEFfdDw9IwkOGs13g+YN6k61rRbdXj97N+vvuGslcCL9uDMY+M6bqDX4k2kGJuvmsSBgIWOjOiOtrW6wWaflGO0OKQ39F1R92Bw3gB1kNg8Es3XjNE1D+CRXt/EQLWLBFmF3p41PpoRg/Gyvw4XqQSMOYdGsr0OaE8ozrXWO2rQo2NDe6BDJzSGqZ234jCtnRLEtFBFvisTEbNCYFRkhKMSfrUecyK5bjHRehEHKfsPxNDTCOl7xrx1DDTng/BIgxyCA21s+xa05oNulkMMd/1qNrekoUUFxwJpb1rf6vrW5CkeMIOhCr5Nxw==

Eu encontrei esta solução , mas para outros não é importante Por isso, não tenho o arquivo ~/.ssh/config .

    
por tachomi 23.06.2016 / 03:01

2 respostas

2

A maneira mais fácil seria desabilitar o hash do known_hosts com HashKnownHosts no no seu ~/.ssh/config para permitir o preenchimento automático de todo o histórico ou apenas listar seus hosts no ~/.ssh/config (você pode armazenar todos os seus Ports e Users , ou crie aliases).

Eu aprecio a criatividade, mas por que reinventar a roda quando já temos a mesma funcionalidade pronta (exceto o envio do Ubuntu HashKnownHosts yes por padrão, o que quebra essa funcionalidade).

    
por 23.06.2016 / 08:18
1

Então, como só quero saber como preencher automaticamente os destinos de meus hosts no arquivo bash_history , encontrei esse recurso com a esperança de ajudar qualquer pessoa na mesma situação.

Basta executar a seguinte linha

$ complete -W "$(echo $(grep '^ssh ' .bash_history | sort -u | sed 's/^ssh //'))" ssh
  • complete - é uma função interna do bash. Portanto, não há um binário no sistema. Ele manipula como os comandos serão concluídos ao pressionar
  • -W - crie uma lista de palavras de preenchimento automático
  • grep '^ssh' .bash_history - retorna todas as linhas que começam com ssh de .bash_history file
  • sort -u - faz as linhas de saída uniq
  • sed 's/^ssh //' - remove o início ssh da string de cada linha
  • ssh - ao executar o comando ssh

Se você não apenas ssh hostname e usar outras pessoas, como ssh user@hostname ou ssh user@hostname -p 2222 , deverá jogar com os recursos regex e grep|sed para manter apenas o hostname ou o que você deseja preencher automaticamente

Insira a linha completa no seu arquivo .bashrc para que você tenha o recurso de preenchimento automático a cada vez que iniciar uma sessão.

    
por 23.06.2016 / 03:01