Warum bieten einige SSH-Sitzungen Autocomplete an und andere nicht?

10

Sehr neue Frage!

Ich bin auf zwei verschiedene Server angewiesen, die beide Teil desselben Amazon AWS-Clusters sind. Sie werden nicht von mir geführt.

In einer SSH-Sitzung kann ich das Terminal automatisch vervollständigen. Auf der anderen Seite nicht - ich wünschte, es wäre so.

Warum ist das so - ist es eine vom Serveradministrator festgelegte Option?

Und kann ich etwas dagegen tun?

Vielen Dank!


quelle

Antworten:

15

Dies ist eigentlich keine Programmierfrage, hat aber mit Ihrer Shell zu tun. Sie können versuchen, die bashShell zu starten (indem Sie bashan der Eingabeaufforderung eingeben ) und prüfen, ob Sie die automatische Vervollständigung durchführen können.

Wenn dies funktioniert, können which bashSie den Speicherort überprüfen und dann chsh -s /bin/bashIhre Shell dauerhaft festlegen.

Eine Liste der verfügbaren Shells finden Sie auch in /etc/shells.

Brad Mace
quelle
3

Es ist eine Kombination aus der Shell, die in Ihrer SSH-Sitzung verwendet wird, und ihrer Konfiguration.

Ihre Shell unterstützt möglicherweise die automatische Vervollständigung, ist jedoch möglicherweise nicht dafür konfiguriert. Wenn Sie die Bash-Shell verwenden, können Sie Ihre lokale .bashrc-Datei wie folgt bearbeiten, um die automatische Vervollständigung bereitzustellen.

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi
Jim Ekleberry
quelle
1
Das Bash-Vervollständigungspaket wird nur für die erweiterte Vervollständigung von Dingen wie Befehlszeilenoptionen, Servernamen, VCS-Repository-Verzeichnissen usw. benötigt. Das Ausfüllen von Befehlen, Verzeichnissen, Dateinamen, Variablen und Benutzernamen funktioniert ohne.
Ak2
2

Von meiner eigenen Antwort auf unix.SE kopiert :

Es scheint, dass speziell in Ubuntu die Einträge in ~/.ssh/known_hostsgehasht sind , so dass die SSH-Vervollständigung sie nicht lesen kann. Dies ist eine Funktion, kein Fehler. Selbst durch Hinzufügen HashKnownHosts nozu ~/.ssh/configund konnte /etc/ssh/ssh_configich das Host-Hashing nicht verhindern.

Die Gastgeber, an denen ich interessiert bin, sind jedoch auch in zu finden ~/.ssh/config. Hier ist ein Skript für Bash Completion, das die Einträge aus dieser Datei liest:

_ssh() 
{
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts=$(grep '^Host' ~/.ssh/config | awk '{print $2}')

    COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
    return 0
}
complete -F _ssh ssh

Fügen Sie das Skript ein /etc/bash_completion.d/sshund geben Sie es mit dem folgenden Befehl ein:

$ . /etc/bash_completion.d/ssh

Ich fand diesen Leitfaden von unschätzbarem Wert und hätte ihn ohne ihn nicht schreiben können. Vielen Dank an Steve Kemp für das Schreiben dieses großartigen Leitfadens!

dotancohen
quelle
1

IIRC könnte es auch ein Problem sein, dass ssh die Hostnamen in ~ / .ssh / unknown_hosts hascht

Die meisten mir bekannten Installationen verwenden ~ / .ssh / unknown_hosts als Quelle für die Liste der verfügbaren Hosts, aber einige Systeme haben auch damit begonnen, "HashKnownHosts yes" festzulegen, wodurch die Verwendung von know_hosts als Quelle verboten wird.

Wenn Ihre bekannten Host-Zeilen mit so etwas beginnen

|1|BWO5qDxk/cFH0wa05JLdHn+j6xQ=|rXQvIxh5cDD3C4

dann wird das Hashing aktiviert.

Marcel G.
quelle