Automatische Vervollständigung von Hostnamen bei Verwendung von SSH in der Verlaufsdatei

Automatische Vervollständigung von Hostnamen bei Verwendung von SSH in der Verlaufsdatei

Ich bin auf der Suche nach einer Funktion, die mir hilft, die Server, mit denen ich mich manchmal per „SSH“ verbinde und die sich in meiner .bash_historyDatei befinden, automatisch zu vervollständigen, ohne mit known_hostsder Datei oder herumzuspielen /etc/bash_completition, sondern sie einfach aus meiner zu holen history.

Ich kann die Datei nicht ändern, known_hostsda die darin enthaltenen Informationen sozusagen „verschlüsselt“ sind und es nicht so wichtig ist, herauszufinden, wie sich dies vermeiden lässt.

z.B

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

ich fanddiese Lösungaber aus anderen, nicht wichtigen Gründen habe ich die ~/.ssh/configDatei nicht.

Antwort1

Viel einfacher wäre es, das Hashing Ihrer known_hostsmit HashKnownHosts noin Ihrem zu deaktivieren ~/.ssh/config, um die automatische Vervollständigung aus dem gesamten Verlauf zu ermöglichen, oder einfach Ihre Hosts in Ihrem aufzulisten (Sie können dort alle Ihre und ~/.ssh/configspeichern oder Aliase erstellen).PortsUsers

Ich schätze die Kreativität, aber warum das Rad neu erfinden, wenn wir die gleiche Funktionalität bereits standardmäßig haben (mit Ausnahme der HashKnownHosts yesstandardmäßigen Auslieferung von Ubuntu, die diese Funktionalität unterbricht).

Antwort2

Da ich ausschließlich wissen möchte, wie ich die Ziele meines Hosts in der bash_historyDatei automatisch vervollständigen kann, habe ich diese Funktion gefunden, in der Hoffnung, dass sie jedem in der gleichen Situation helfen kann.

Führen Sie einfach die folgende Zeile aus

$ complete -W "$(echo $(grep '^ssh ' .bash_history | sort -u | sed 's/^ssh //'))" ssh
  • complete- ist eine eingebaute Bash-Funktion. Es gibt also keine Binärdatei auf dem System. Es steuert, wie Befehle vervollständigt werden, wenn Sie drücken
  • -W- Erstellen Sie eine automatisch vervollständigte Wortliste
  • grep '^ssh' .bash_history- gibt alle Zeilen aus .bash_historyder Datei zurück, die mit ssh beginnen
  • sort -u- Machen Sie die Ausgabezeilen eindeutig
  • sed 's/^ssh //'- Entfernen Sie die Anfangszeichenfolge sshaus jeder Zeile
  • ssh- bei der Ausführung sshdes Befehls

Wenn Sie nicht nur ssh hostnameund verwenden Sie andere wie ssh user@hostnameoder ssh user@hostname -p 2222müssen Sie mit den regexund grep|sedFunktionen spielen, um nur halten die hostnameoder was auch immer Sie wollen Autovervollständigung

Fügen Sie die vollständige Zeile in Ihre .bashrcDatei ein, damit Sie bei jedem Sitzungsstart über die Autovervollständigungsfunktion verfügen.

verwandte Informationen