![Automatische Vervollständigung von Hostnamen bei Verwendung von SSH in der Verlaufsdatei](https://rvso.com/image/89155/Automatische%20Vervollst%C3%A4ndigung%20von%20Hostnamen%20bei%20Verwendung%20von%20SSH%20in%20der%20Verlaufsdatei.png)
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_history
Datei befinden, automatisch zu vervollständigen, ohne mit known_hosts
der Datei oder herumzuspielen /etc/bash_completition
, sondern sie einfach aus meiner zu holen history
.
Ich kann die Datei nicht ändern, known_hosts
da 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/config
Datei nicht.
Antwort1
Viel einfacher wäre es, das Hashing Ihrer known_hosts
mit HashKnownHosts no
in 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/config
speichern oder Aliase erstellen).Ports
Users
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 yes
standardmäß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_history
Datei 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 Wortlistegrep '^ssh' .bash_history
- gibt alle Zeilen aus.bash_history
der Datei zurück, die mit ssh beginnensort -u
- Machen Sie die Ausgabezeilen eindeutigsed 's/^ssh //'
- Entfernen Sie die Anfangszeichenfolgessh
aus jeder Zeilessh
- bei der Ausführungssh
des Befehls
Wenn Sie nicht nur ssh hostname
und verwenden Sie andere wie ssh user@hostname
oder ssh user@hostname -p 2222
müssen Sie mit den regex
und grep|sed
Funktionen spielen, um nur halten die hostname
oder was auch immer Sie wollen Autovervollständigung
Fügen Sie die vollständige Zeile in Ihre .bashrc
Datei ein, damit Sie bei jedem Sitzungsstart über die Autovervollständigungsfunktion verfügen.