![Autocompletar nombres de host al usar SSH dentro del archivo histórico](https://rvso.com/image/89155/Autocompletar%20nombres%20de%20host%20al%20usar%20SSH%20dentro%20del%20archivo%20hist%C3%B3rico.png)
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_history
archivo sin alterar el known_hosts
archivo o /etc/bash_completition
simplemente tomarlos de mi archivo history
.
No puedo alterar el known_hosts
archivo 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/config
archivo.
Respuesta1
Una manera mucho más fácil sería deshabilitar el hash de tu known_hosts
con HashKnownHosts no
en tu ~/.ssh/config
para permitir la autocompletar de todo el historial, o simplemente enumerar tus hosts en tu ~/.ssh/config
(puedes almacenar allí todos tus Ports
y Users
o 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 yes
de 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_history
archivo, 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 autocompletargrep '^ssh' .bash_history
- devolver todas las líneas que comienzan con ssh del.bash_history
archivosort -u
- hacer que las líneas de salida sean únicassed 's/^ssh //'
- eliminar lassh
cadena inicial de cada líneassh
- al ejecutarssh
el comando
Si no solo ssh hostname
usas otros como ssh user@hostname
o ssh user@hostname -p 2222
debes jugar con las funciones regex
y grep|sed
para conservar solo hostname
o lo que quieras autocompletar
Inserte la línea completa en su .bashrc
archivo para que tenga la función de autocompletar cada vez que inicie una sesión.