Я пытаюсь использовать Ansible для развертывания на хосте AWS, у которого нет общедоступного IP-адреса. Я могу связаться с хостом вручную с помощью ssh на поле перехода, и в этом поле ssh на частный компьютер, например my machine-->bastion-->private server
Я не думаю, что могу использовать встроенную поддержку Ansible, потому что в этой пьесе используются роли, которые используются в других играх. Эти роли полагаются на определенные группы инвентаря. Если я настрою group_vars
тогда это приведет к запуску сценариев для развертывания в инфраструктуре, отличной от AWS.
Мой файл конфигурации ssh выглядит так:
# 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
Обратите внимание, что ключ одинаков для бастиона и частных серверов.
Когда я пытаюсь ssh 10.0.0.175 -F /tmp/aws_bastion_ssh_config -vvv
Получаю следующий результат:
(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
Как я могу заставить это работать?
Нужен ли мне ключ на прыжковой коробке? Как мне это настроить?
Изменить: Дополнительная информация: - Чтобы уточнить, что я могу подключиться к частной машине из окна перехода, когда я это сделаю ssh bastion.example.com -F /tmp/aws_bastion_ssh_config
Я добираюсь до сервера-бастиона. Я скопировал ключ на этот сервер, и когда я ssh ubuntu@10.0.0.175 -i ~/.ssh/key.pem
Подключаюсь к частной машине. В идеале я бы предпочел не иметь ключ на коробке перехода, я положил его туда только для того, чтобы убедиться, что сеть работает правильно.
То, что вы делаете с ProxyCommand, запускает две совершенно разные команды ssh.
Ваша команда для 1. работает нормально, но вы не видите вывода отладки для 2. Поскольку вы использовали разрешаемый TLD, а все остальное - обычная конфигурация, 2. не выдает никаких ошибок, но не делает то, что вы хотите, потому что это было никогда не обеспечивался IdentityFile
и User
варианты из вашей конфигурации. Он аутентифицируется с другим ключом или пользователем и отклоняется бастионом (по праву).
Чтобы гарантировать, что 2. также считывает вашу конфигурацию, явно передайте эту опцию следующим образом:
# 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
И все должно работать. Подтвердите с помощью:
ssh -vvv -F /tmp/aws_bastion_ssh_config 10.0.0.175
Затем удалите -vvv
образуют как 1., так и 2. Если вы переместите /tmp/aws_bastion_ssh_config
в расположение по умолчанию, оба -F
параметры можно удалить (и ssh прочитает /etc/ssh/ssh_config
и ~/.ssh/config files
)