Preencher automaticamente nomes de host ao usar SSH no arquivo de histórico

Preencher automaticamente nomes de host ao usar SSH no arquivo de histórico

Estou procurando um recurso que me ajude a preencher automaticamente os servidores que "destruí" em algum momento e estão no meu .bash_historyarquivo sem mexer no known_hostsarquivo ou /etc/bash_completition, apenas pegue-os do meu arquivo history.

Não posso mexer no known_hostsarquivo porque as informações nele contidas são "criptografadas" e procurar 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 encontreiesta soluçãomas por outro motivo não importante, não tenho o ~/.ssh/configarquivo.

Responder1

Uma maneira muito mais fácil seria desabilitar o hash do seu para known_hostspermitir o preenchimento automático de todo o histórico ou apenas listar seus hosts no seu (você pode armazenar lá todos os seus e ou criar aliases).HashKnownHosts no~/.ssh/config~/.ssh/configPortsUsers

Agradeço a criatividade, mas por que reinventar a roda quando já temos a mesma funcionalidade pronta para uso (exceto o envio do Ubuntu HashKnownHosts yespor padrão, que quebra essa funcionalidade).

Responder2

Então, como eu só quero saber como preencher automaticamente os destinos de meus hosts dentro do bash_historyarquivo, descobri esse recurso na esperança de ajudar alguém 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 controla como os comandos serão concluídos ao pressionar
  • -W- faça uma lista de palavras de preenchimento automático
  • grep '^ssh' .bash_history- retorna todas as linhas que começam com ssh do .bash_historyarquivo
  • sort -u- torne as linhas de saída únicas
  • sed 's/^ssh //'- remova a sshstring inicial de cada linha
  • ssh- ao executar ssho comando

Se você não apenas ssh hostnameusa outros como ssh user@hostnameou ssh user@hostname -p 2222você deve brincar com os recursos regexe grep|sedpara manter apenas o hostnameou o que deseja preencher automaticamente

Insira a linha completa em seu .bashrcarquivo para ter o recurso de preenchimento automático sempre que iniciar uma sessão.

informação relacionada