ssh-keyscan через бастион
У меня есть несколько тестовых серверов, работающих за бастион на Openstack. Тестовый стек часто удаляется и создается. После создания стека я запускаю набор скриптов Ansible для установки и настройки серверов. У меня есть процесс почти полностью автоматизирован, но я не могу получить ssh-keyscan
работать, когда удаленный хост находится за хостом бастиона.
Это то, что у меня есть в моем ~/.ssh/config
Host bastion
HostName 1.2.3.4
User myuser
IdentityFile ~/.ssh/private_key.pem
Host remote-host1
HostName 192.168.0.123
User myuser
IdentityFile ~/.ssh/private_key.pem
ProxyCommand ssh -W %h:%p bastion
Если я попытаюсь бежать ssh-keyscan remote-host1
я получил
getaddrinfo remote-host1: Name or service not known
Бег ssh remote-host1
работает но подскажет
The authenticity of host '192.168.0.123 (<no hostip for proxy command>)' can't be established.
ECDSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)?
чего я пытаюсь избежать
Я знаю, что есть опция SSH -o StrictHostKeyChecking=no
и это можно передать в Ansible с помощью ssh_args
Вариант конфигурации. Я не хотел бы использовать это все же. Я также знаю, что использование ssh-keyscan без проверки отпечатка пальца позволяет атаковать "человек посередине". В этом тестовом сценарии я готов пойти на риск, потому что только мой IP занесен в белый список для доступа.
1 ответ
Быстрый поиск в Google предполагает, что ssh-keyscan не учитывает конфигурационный файл ssh и все другие трюки ssh. (Хотя эта ветка довольно старая).
С помощью Ansible вы можете делегировать задачу keyscan на ваш хост-бастион, а затем локально добавить в нее файл known_hosts:
- hosts: localhost
gather_facts: no
tasks:
- command: "ssh-keyscan {{ new_host }}"
register: new_host_fingerprint
delegate_to: bastion
- lineinfile:
dest: /root/ssh/known_hosts
line: "{{ item }}"
with_items: new_host_fingerprint.stdout_lines
где new_host
это IP-адрес создаваемого хоста (в вашем примере 192.168.0.123).
SSH до бастиона и беги ssh-keyscan
оттуда:
ssh bastion ssh-keyscan remote-host1