
Estoy intentando utilizar Ansible para implementar en un host de AWS que no tiene una dirección IP pública. Puedo llegar al host manualmente mediante ssh en un jump box, y en ese cuadro ssh en la máquina privada comomy machine-->bastion-->private server
No creo que pueda utilizar el soporte nativo de Ansible porque este libro de estrategias utiliza roles que se comparten con otras obras. Estos roles dependen de grupos de inventario particulares. Si lo configuro group_vars
, esto dañará los manuales para implementar esto en infraestructura que no sea de AWS.
Mi archivo de configuración ssh se ve así:
# 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
Tenga en cuenta que la clave es la misma para los servidores bastión y privado.
Cuando lo intento ssh 10.0.0.175 -F /tmp/aws_bastion_ssh_config -vvv
obtengo el siguiente resultado:
(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
¿Cómo puedo hacer que esto funcione?
¿Necesito que la clave esté presente en el jump box? ¿Cómo configuro eso?
Editar: Más información: - Para aclarar que puedo conectarme a la máquina privada desde el jump box cuando llego ssh bastion.example.com -F /tmp/aws_bastion_ssh_config
al servidor bastión. Copié la clave en ese servidor y cuando me conecto a la máquina privada. Idealmente, preferiría no tener la clave en el jump box, solo la puse allí para asegurarme de que la red esté funcionando correctamente.ssh [email protected] -i ~/.ssh/key.pem
Respuesta1
Lo que haces con ProxyCommand es iniciar dos comandos ssh completamente separados.
- eso está intentando usar el Proxy para autenticarse en 10.0.0.175, por lo que no necesita las claves ni la configuración en el bastión.
- el que proporciona el Proxy, que solo necesita poder autenticarse en el bastión.
Su comando para 1. funciona bien, pero no ve el resultado de depuración para 2. Dado que usó un TLD resoluble y todo lo demás es una configuración común, 2. no arroja ningún error, pero no está haciendo lo que desea porque estaba Nunca se le proporcionaron las opciones IdentityFile
y User
de su configuración. Se está autenticando con una clave o usuario diferente y bastión lo rechaza (con razón).
Para asegurarse de que 2. también lea su configuración, pase explícitamente esa opción de esta manera:
# 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
Y todo debería funcionar. Confirmar con:
ssh -vvv -F /tmp/aws_bastion_ssh_config 10.0.0.175
Luego elimine el -vvv
formulario 1. y 2. Si mueve su /tmp/aws_bastion_ssh_config
ubicación predeterminada, ambas -F
opciones se pueden eliminar (y ssh leerá/etc/ssh/ssh_config
y ~/.ssh/config files
)