Autocompletar nombres de host al usar SSH dentro del archivo histórico

Autocompletar nombres de host al usar SSH dentro del archivo histórico

Estoy buscando una función que me ayude a completar automáticamente los servidores que "eliminé" en algún momento y que están en mi .bash_historyarchivo sin alterar el known_hostsarchivo o /etc/bash_completitionsimplemente tomarlos de mi archivo history.

No puedo alterar el known_hostsarchivo porque la información que contiene está "encriptada" y buscar cómo evitarlo no es tan importante.

p.ej

$ 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==

encontréesta soluciónpero por otra razón no importante, no tengo el ~/.ssh/configarchivo.

Respuesta1

Una manera mucho más fácil sería deshabilitar el hash de tu known_hostscon HashKnownHosts noen tu ~/.ssh/configpara permitir la autocompletar de todo el historial, o simplemente enumerar tus hosts en tu ~/.ssh/config(puedes almacenar allí todos tus Portsy Userso crear alias).

Aprecio la creatividad, pero ¿por qué reinventar la rueda cuando ya tenemos la misma funcionalidad lista para usar (excepto el envío de Ubuntu HashKnownHosts yesde forma predeterminada, que rompe esta funcionalidad)?

Respuesta2

Entonces, como solo quiero saber cómo completar automáticamente los objetivos de mis hosts dentro del bash_historyarchivo, encontré esta función con la esperanza de ayudar a cualquiera que se encuentre en la misma situación.

Simplemente ejecuta la siguiente línea

$ complete -W "$(echo $(grep '^ssh ' .bash_history | sort -u | sed 's/^ssh //'))" ssh
  • complete- es una función incorporada de bash. Entonces no hay ningún binario en el sistema. Maneja cómo se completarán los comandos al presionar
  • -W- hacer una lista de palabras de autocompletar
  • grep '^ssh' .bash_history- devolver todas las líneas que comienzan con ssh del .bash_historyarchivo
  • sort -u- hacer que las líneas de salida sean únicas
  • sed 's/^ssh //'- eliminar la sshcadena inicial de cada línea
  • ssh- al ejecutar sshel comando

Si no solo ssh hostnameusas otros como ssh user@hostnameo ssh user@hostname -p 2222debes jugar con las funciones regexy grep|sedpara conservar solo hostnameo lo que quieras autocompletar

Inserte la línea completa en su .bashrcarchivo para que tenga la función de autocompletar cada vez que inicie una sesión.

información relacionada