Configurando a caixa de salto SSH para Ansible - não é possível conectar

Configurando a caixa de salto SSH para Ansible - não é possível conectar

Estou tentando usar o Ansible para implantar em um host AWS que não possui um endereço IP público. Consigo acessar o host manualmente por ssh em uma caixa de salto e, nessa caixa, ssh na máquina privada, comomy machine-->bastion-->private server

Não acho que possa usar o suporte nativo do Ansible porque este manual usa funções que são compartilhadas com outras peças. Essas funções dependem de grupos de inventário específicos. Se eu configurar group_vars, isso irá atrapalhar os manuais para implantá-lo em infra-estruturas não-AWS.

Meu arquivo de configuração ssh é assim:

# 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

Observe que a chave é a mesma para os servidores bastião e privados.

Quando tento ssh 10.0.0.175 -F /tmp/aws_bastion_ssh_config -vvvobtenho a seguinte saída:

    (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

Como posso fazer isso funcionar?

Preciso que a chave esteja presente na caixa de salto? Como faço para configurar isso?

Editar: Mais informações: - Para esclarecer que posso me conectar à máquina privada a partir da caixa de salto quando chegar ssh bastion.example.com -F /tmp/aws_bastion_ssh_configao servidor bastião. Copiei a chave para esse servidor e quando me conectei à máquina privada. Idealmente, eu preferiria não ter a chave na caixa de salto, só a coloquei lá para garantir que a rede esteja funcionando corretamente.ssh [email protected] -i ~/.ssh/key.pem

Responder1

O que você faz com ProxyCommand é iniciar dois comandos ssh totalmente separados.

  1. que está tentando usar o Proxy para autenticar em 10.0.0.175, então você não precisa das chaves e configuração no bastion.
  2. aquele que fornece o proxy, que só precisa ser capaz de se autenticar no bastião.

Seu comando para 1. funciona bem, mas você não está vendo a saída de depuração para 2. Como você usou um TLD resolvível e todo o resto é configuração comum, 2. não está exibindo nenhum erro - mas não está fazendo o que deseja porque foi nunca forneceu as opções IdentityFilee Userda sua configuração. Ele está autenticando com uma chave ou usuário diferente e foi rejeitado pelo bastion (com razão).

Para garantir que 2. também leia sua configuração, passe explicitamente essa opção assim:

# 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

E tudo deve funcionar. Confirme com:

ssh -vvv -F /tmp/aws_bastion_ssh_config 10.0.0.175

Em seguida, remova o -vvvformulário 1. e 2. Se você mover /tmp/aws_bastion_ssh_configpara o local padrão, ambas -Fas opções poderão ser removidas (e o ssh lerá/etc/ssh/ssh_config e ~/.ssh/config files)

informação relacionada