Lokales Einrichten des Gateway-Server-Jump-Bastion-Hosts

Lokales Einrichten des Gateway-Server-Jump-Bastion-Hosts

Ich möchte über einen Zwischenserver (Bastion, Jump, Gateway) eine SSH-Verbindung zu einem Remote-Privathost herstellen. Dieser Befehl funktioniert einwandfrei:

ssh gateway ssh private

Mit diesem ~/.ssh/config-Setup:

Host gateway
  User gateway-user
  HostName XX.XX.XX.XX
  RequestTTY force

Wie kann ich dies in meiner ~/.ssh/config implementieren? Ich habe zahlreiche Iterationen von ProxyCommand ohne Erfolg ausprobiert. Ich möchte die Identitätsdatei auf dem Gateway-Host verwenden, um auf private Hosts zuzugreifen. Ich möchte Folgendes tun können:

ssh private

Ich kenne die hier beschriebene Technik, allerdings muss dafür mein öffentlicher Schlüssel auf allen privaten Hosts vorhanden sein, was ich aber nicht möchte:

http://www.lorrin.org/blog/2014/01/10/one-liner-ssh-via-jump-box-using-proxycommand/

Antwort1

Konfigurieren Sie zunächst Ihre SSH-Schlüssel auf dem Gateway, damit Sie per SSH auf Private zugreifen können. Erstellen Sie dann auf Ihrem Client ein separates privates/öffentliches Schlüsselpaar, das Sie zur Authentifizierung auf dem Gateway verwenden. Beispiel ssh-keygen -t rsa -f id_gateway:

Verwenden Sie dann auf dem Gateway die command=Syntax in Ihrer Datei authorized_keys. Ihr Eintrag könnte beispielsweise folgendermaßen aussehen:

command="sh -c 'ssh private ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3....

Weitere Informationen finden Sie in der Manpage von sshd command="command". Fügen Sie dieser Zeile unbedingt den Schlüssel id_gateway.pub hinzu. .ssh/configFügen Sie dann auf Ihrem Client einen Eintrag wie diesen hinzu:

Host private
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

Jetzt sollten Sie von Ihrem Client aus ssh privatedirekt auf und zugreifen können. Dies funktioniert sogar für scpund sftp.

Extra-Guthaben

Wenn Sie dies für mehrere Server verwenden möchten, aber nur einen öffentlichen Schlüssel auf dem Gateway verwalten möchten, können Sie den folgenden Trick verwenden. sshdStandardmäßig können nur bestimmte Variablen aus der lokalen Umgebung empfangen werden. Eine davon ist , LC_PAPERdie selten für irgendetwas verwendet wird. Daher können wir sie verwenden, um den Hostnamen des Servers wie folgt zu übergeben:

Ändern Sie zunächst den öffentlichen Schlüsseleintrag in

command="sh -c 'ssh $LC_PAPER ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3...

Fügen Sie dann auf Ihrem Client Ihrer .bashrcDatei (oder der von Ihnen verwendeten Shell) eine Funktion hinzu, die folgendermaßen aussieht:

ssh_proxy() {
  LC_PAPER=$1 /usr/bin/ssh $*
}

Erstellen Sie dann bei Bedarf einen Alias ​​für:

alias ssh=ssh_proxy

Fügen Sie abschließend HostAbschnitte .ssh/configwie den oben gezeigten hinzu. Beispiel:

Host private2
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

Jetzt sollten Sie dazu in der Lage sein, ssh privateund zwar ssh private2mit nur einem öffentlichen Schlüssel auf dem Gateway.

verwandte Informationen