Auto Completion bei SSH

Früher gabs ja mal die Auto Completition bei SSH Verbindungen von Haus aus, heute ist das bei den meisten Distributionen nicht mehr so, da die Hostnamen und IP Adressen standardmässig gehasht abgespeichert werden. Dies kann man in der .ssh/known_hosts sehen, der Beginn ein jeder Zeile stellt den Hash von Hostnamen/IP dar.
Um nun die Auto Completion für SSH Verbindungen zu reaktivieren, muss man erstmal seine SSH Config anpassen. Dies geschieht einfach über das Einfügen/Anpassen des Eintrags “HashKnownHosts no” in der lokalen .ssh/ssh_config oder global in /etc/ssh/ssh_config.
Ist dies erledigt, so muss man noch seine bisherigen known_hosts löschen, indem man das known_hosts File in seinem Home Directory löscht oder leert. Nun fragt ssh beim neuen Verbindungsaufbau natürlich wieder nach, speichert den Host ab, diesmal aber nicht gehasht.

Die Bash Completion selbst aktiviert man nun für Ubtuntu/Debian oder ähnliche Systeme in dem File /etc/bash.bashrc. Dort entkommentiert man einfach den 3 Zeiler ab “#enable bash completion in interactive shells”:

if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi

Nach einem Neustart der Session funktioniert nun die Auto Completion mittels “ssh user@hostname”, sobald der Hostname/IP einmal bekannt ist.
Bei SuSe beispielsweise ist das bash_completion Skript standardmässig nicht dabei, deshalb gibts das hier zum Download

Falls jemand das hier erklärte Skript zum Anpassen der Tabnamen in Konsole oder ähnliches verwendet, so muss er das dem bash_completion Skript noch publizieren. Dazu fügt ihr im Skript unter dem Punkt “# ssh(1) completion” Am Ende in der Zeile “shopt -u hostcomplete && complete -F _ssh ssh slogin sftpxhost autossh” einfach noch den entsprechenden Aufruf mit ein, dann wird dieses bei der Auto Vervollständigung auch berücksichtigt.

Related Posts: