Ich habe ein paar Server konfiguriert ~/.ssh/config
, wie alpha
und beta
. Wie kann ich Bash so konfigurieren, dass die Befehle ssh al<tab>
und scp file.tgz al<tab>
die Namen der konfigurierten Server automatisch vervollständigt werden?
Ich möchte die Server nicht bei jedem Hinzufügen zu einer anderen Datei (z. B. einem Bash-Array) hinzufügen, da wir regelmäßig Server hinzufügen und entfernen und die Liste recht umfangreich ist.
bash
ssh
autocomplete
scp
dotancohen
quelle
quelle
bash-completion
installiert.Antworten:
Fand es!!
Es scheint, dass die Einträge
~/.ssh/known_hosts
in Ubuntu gehasht sind , so dass die SSH-Vervollständigung sie nicht lesen kann. Dies ist eine Funktion, kein Fehler. Selbst durch das HinzufügenHashKnownHosts no
von~/.ssh/config
und konnte/etc/ssh/ssh_config
ich das Host-Hashing nicht verhindern.Die Gastgeber, an denen ich interessiert bin, finden sich auch in
~/.ssh/config
. Hier ist ein Skript für die Bash-Vervollständigung, das die Einträge aus dieser Datei liest:Fügen Sie das Skript ein
/etc/bash_completion.d/ssh
und geben Sie den folgenden Befehl ein:Ich fand dieses Handbuch von unschätzbarem Wert und hätte es ohne dieses Skript nicht schreiben können. Vielen Dank, Steve Kemp, für das Schreiben dieses tollen Leitfadens!
quelle
/etc/hosts
vervollständigt Einträge, die sich in anderen Distributionen befinden , automatisch.Vorverpackt
Sie sagen nicht, welche Distribution Sie verwenden, aber auf meinem Fedora 19-System ist das folgende Paket installiert,
bash-completion
das diese Funktion über diese Vervollständigungsregeldatei bereitstellt:Hier ist das Paket, das ich installiert habe:
Wenn Sie diese Regeldatei durchsehen, werden Zeilengruppen angezeigt, die die
$HOME/.ssh/config
Datei abfragen :Roll deine eigenen
Ich habe auch dieses Gist gefunden, known_hosts_autocomplete.sh , das etwas Ähnliches tut, außer mit der
$HOME/.ssh/known_hosts
Datei.Sie könnten etwas Ähnliches mit Ihrer
$HOME/.ssh/config
Datei tun, wenn Sie aus irgendeinem Grund die Vervollständigungsregeldatei fürssh
bereits vorgefertigte Dateien nicht finden können .quelle
/usr/share/bash-completion/completions/ssh
. Könnten Sie die gesamte Datei irgendwo posten, damit ich sie kopieren kann? Vielen Dank!/usr/share/bash-completion/completions/ssh
hilft nichts! Dercomplete -W ...
Befehl wird auch nicht über die Bash-Eingabeaufforderung ausgeführt. Worum könnte es hier gehen?ssh
oder keine Bash-Vervollständigung erhalten kannscp
.Ich habe festgestellt, dass die automatische Vervollständigung nicht funktioniert, da Ubuntu bekannte Hosts hasht. Du kannst hinzufügen
Zu deiner
.ssh/config
Datei werden aber vorhandene Hosts nicht enthasht.quelle
~/.ssh/config
und geändert/etc/ssh/ssh_config
und die~/.ssh/known_hosts
Datei entfernt. Nach der erneuten Anmeldung an den Servern werden die Hostnamen weiterhin als Hash gespeichert..ssh/config
Dateien diese Zeile bereits haben werden. Lassen Sie mich wissen, ob das funktioniert.So aktivieren Sie die automatische Vervollständigung von ssh in Debian und Ubuntu:
Beachten Sie, dass dies im Gegensatz zu den obigen Ausführungen und der ursprünglichen Frage überhaupt nichts mit dem Hashing von known_hosts zu tun hat . Wenn Sie von known_hosts aus automatisch vervollständigen möchten, müssen Sie natürlich das Hashing deaktivieren, aber das wird dringend empfohlen.
Zum Beispiel habe ich:
in meiner .ssh / config, und ich habe immer noch ssh Auto-Vervollständigung funktioniert gut gegen Hosts in .ssh / config und / etc / hosts aufgeführt. Sie müssen den Host zu .ssh / config hinzufügen, wie im OP angegeben:
Host my-awesome-host Hostname the.real.host.name
(Oder Sie können einen Host-Eintrag zu / etc / hosts hinzufügen, eine weitere Quelle für die Debian / Ubuntu-Skripte.)
Dann können Sie einfach tippen
ssh my-awe<tab>
und es wird automatisch vervollständigt. Auch dies ist selbst dann der Fall, wenn Sie HashKnownHosts verwenden, was sehr zu empfehlen ist. (Beachten Sie, dass die Bash-Vervollständigung in Ihrer Bash-Shell aktiviert sein muss und Sie diese Skripte wie oben für Ihre Distribution installiert haben müssen.)Dann fügen Sie diese Zeilen zu Ihrem
.bashrc
es ermöglichen (erfordert eine Abmeldung und melden Sie sich wieder in, oder einfach nur eine neuebash
typisierte in eine neue Shell zu starten. (Sie brauchen nicht zu aktivieren , wenn es bereits in aktiviert ist/etc/bash.bashrc
und/etc/profile
Quellen/etc/bash.bashrc
).Dies ermöglicht es ssh Auto - Vervollständigung (unter anderem!) Aus
~/.ssh/config
,/etc/hosts
usw.Beachten Sie, dass Debian standardmäßig ash anstatt bash verwendet. Sie können einfach zu bash wechseln:
(Sie müssen sich abmelden und erneut anmelden, damit dies wirksam wird.)
quelle
Unter Ubuntu 14.04
ssh
werden die in Ihrem Browser genannten Server automatisch vervollständigt~/.ssh/config
Ich bemerkte es, als mir klar wurde, dass nur einer der Server, auf die ich normalerweise zugreife, automatisch vervollständigt wird. Der einzige Unterschied zwischen den beiden bestand in einem Eintrag in der SSH-Konfigurationsdatei, der sich auf die Authentifizierung bezog. Als ich der Konfigurationsdatei für den anderen Server einen neuen Eintrag hinzufügte, wurde auch die automatische Vervollständigung gestartet.
Hier ist der Eintrag für diejenigen, die gefragt haben:
Ich wäre sehr überrascht, wenn es darauf ankommt, was Sie in der Konfiguration spezifizieren (solange es natürlich noch gültig ist).
quelle