Einrichten einer SSH-Jumpbox für Ansible – keine Verbindung möglich

Einrichten einer SSH-Jumpbox für Ansible – keine Verbindung möglich

Ich versuche, Ansible zu verwenden, um auf einem AWS-Host bereitzustellen, der keine öffentliche IP-Adresse hat. Ich kann den Host manuell per SSH auf einer Jumpbox erreichen und auf dieser Box per SSH auf die private Maschine wie folgtmy machine-->bastion-->private server

Ich glaube nicht, dass ich die native Unterstützung von Ansible nutzen kann, da dieses Playbook Rollen verwendet, die mit anderen Plays geteilt werden. Diese Rollen basieren auf bestimmten Inventargruppen. Wenn ich das einrichte, group_varswird dies die Playbooks für die Bereitstellung in einer Nicht-AWS-Infrastruktur beschädigen.

Meine SSH-Konfigurationsdatei sieht folgendermaßen aus:

# Servers in availability zone A
    Host 10.0.0.*
      ProxyCommand ssh -W %h:%p bastion.example.com
      IdentityFile ~/.ssh/key.pem

# Servers in availability zone B
Host 10.0.1.*
  ProxyCommand ssh -W %h:%p bastion.example.com
  IdentityFile ~/.ssh/key.pem

# The bastion host itself
Host bastion.example.com
  User ubuntu
  IdentityFile ~/.ssh/key.pem
  ControlMaster auto
  ControlPath ~/.ssh/ansible-%r@%h:%p
  ControlPersist 5m

Beachten Sie, dass der Schlüssel für Bastion- und private Server derselbe ist.

Beim Versuch ssh 10.0.0.175 -F /tmp/aws_bastion_ssh_config -vvverhalte ich die folgende Ausgabe:

    (venv) andrew@dell:~/projects/ansible-playbooks$ ssh 10.0.0.175 -F /tmp/aws_bastion_ssh_config -vvv
OpenSSH_7.2p2 Ubuntu-4ubuntu2.4, OpenSSL 1.0.2g  1 Mar 2016
debug1: Reading configuration data /tmp/aws_bastion_ssh_config
debug1: /tmp/aws_bastion_ssh_config line 6: Applying options for 10.0.0.*
debug1: Executing proxy command: exec ssh -W 10.0.0.175:22 bastion.example.com
debug1: permanently_drop_suid: 1000
debug1: key_load_public: No such file or directory
debug1: identity file /home/andrew/.ssh/key.pem type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/andrew/.ssh/key.pem-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.4
Permission denied (publickey).
ssh_exchange_identification: Connection closed by remote host

Wie kann ich das zum Laufen bringen?

Muss der Schlüssel auf der Jumpbox vorhanden sein? Wie konfiguriere ich das?

Bearbeiten: Weitere Informationen: - Um klarzustellen, dass ich mich von der Jumpbox aus mit der privaten Maschine verbinden kann, wenn ich ssh bastion.example.com -F /tmp/aws_bastion_ssh_configden Bastion-Server erreiche. Ich habe den Schlüssel auf diesen Server kopiert und verbinde mich dann mit der privaten Maschine. Idealerweise hätte ich den Schlüssel lieber nicht auf der Jumpbox, ich habe ihn nur dort abgelegt, um sicherzustellen, dass das Netzwerk ordnungsgemäß läuft.ssh [email protected] -i ~/.ssh/key.pem

Antwort1

Mit ProxyCommand starten Sie zwei völlig separate SSH-Befehle.

  1. Das versucht, den Proxy zur Authentifizierung bei 10.0.0.175 zu verwenden, sodass Sie die Schlüssel und die Konfiguration auf Bastion nicht benötigen.
  2. derjenige, der den Proxy bereitstellt, der sich nur gegenüber Bastion authentifizieren können muss.

Ihr Befehl für 1. funktioniert einwandfrei, aber Sie sehen die Debug-Ausgabe für 2. nicht. Da Sie eine auflösbare TLD verwendet haben und alles andere eine gängige Konfiguration ist, gibt 2. keine Fehler aus – tut aber nicht das, was Sie möchten, weil es nie mit den Optionen IdentityFileund Useraus Ihrer Konfiguration bereitgestellt wurde. Es authentifiziert sich mit einem anderen Schlüssel oder Benutzer und wird von Bastion abgelehnt (zu Recht).

Um sicherzustellen, dass 2. auch Ihre Konfiguration liest, übergeben Sie diese Option explizit wie folgt:

# Servers in availability zone A
Host 10.0.0.*
  ProxyCommand ssh -vvv -F /tmp/aws_bastion_ssh_config -W %h:%p bastion.example.com
  IdentityFile ~/.ssh/key.pem

# Servers in availability zone B
Host 10.0.1.*
  ProxyCommand ssh -vvv -F /tmp/aws_bastion_ssh_config -W %h:%p bastion.example.com
  IdentityFile ~/.ssh/key.pem

# The bastion host itself
Host bastion.example.com
  User ubuntu
  IdentityFile ~/.ssh/key.pem
  ControlMaster auto
  ControlPath ~/.ssh/ansible-%r@%h:%p
  ControlPersist 5m

Und alles sollte funktionieren. Bestätigen Sie mit:

ssh -vvv -F /tmp/aws_bastion_ssh_config 10.0.0.175

Entfernen Sie dann die -vvvFormulare 1 und 2. Wenn Sie Ihr /tmp/aws_bastion_ssh_configan den Standardspeicherort verschieben, -Fkönnen beide Optionen entfernt werden (und ssh liest/etc/ssh/ssh_config Und ~/.ssh/config files)

verwandte Informationen