Ich versuche, meine Server-Aliase projektübergreifend zu standardisieren, indem ich SSH-Konfigurationsdateien miteinander verknüpfe, die ich unter Versionskontrolle halten kann.
Ich möchte in der Lage sein, Maschinenaliase zusammen mit IP-Adressen und SSH-Schlüsseln an einem Ort (den SSH-Konfigurationen) zu definieren. Dies funktioniert gut mit SSH-basierten Dienstprogrammen wie /bin/ssh
und (glaube ich) scp. Sie erhalten sogar eine Tab-Vervollständigung.
Wenn ich die Aliase jedoch in meiner SSH-Konfiguration einstelle, sind sie für Ping und andere Standard-Netzwerkdienstprogramme nicht verfügbar. Ich möchte meine /etc/hosts nicht mit meinen SSH-Konfigurationsdateien synchron halten müssen.
Gibt es eine Möglichkeit, entweder
- SSH-Aliase automatisch so einrichten, als wären sie in
/etc/hosts
? oder - eine Suite von Netzwerkdienstprogrammen finden, die die aktive SSH-Konfiguration als Quelle für Aliase verwenden?
Antwort1
Ich habe eine kleine Shell-Funktion geschrieben, die genau das tut und beispielsweise in Ihrem platziert werden kann .bashrc
.
Es ersetzt ping
und sucht nach dem letzten Argument (Host) in , .ssh/config
bevor das Original aufgerufen wird /bin/ping
, d. h. es ping -c 2 <host>
wird aufgerufen /bin/ping -c2 <hostname>
, wo <hostname>
sich die passende IP/der passende Hostname in befindet .ssh/config
. Wenn in der Datei kein Host gefunden wird, der dem letzten Argument entspricht, wird wie beim Standard der ursprüngliche Wert verwendet ping
.
ping()
{
# Process args
local i=0
local options=""
local host=""
for arg
do
i=$(($i+1))
if [ "$i" -lt "$#" ]
then
options="${options} ${arg}"
else
host="${arg}"
fi
done
# Find host
local hostname=$(awk "\$1==\"Host\" {host=\$2} \$1==\"HostName\" && host==\"${host}\" {print \$2}" "$HOME/.ssh/config")
if [ -z "$hostname" ]
then
hostname="$host"
fi
# Run ping
/bin/ping $options $hostname
}
Antwort2
pip3 installieren sshping
dann sshping Hostname