【问题标题】:Ansible known_hosts module with non-standard port具有非标准端口的 Ansible known_hosts 模块
【发布时间】:2020-01-01 02:43:36
【问题描述】:

我正在配置一个新服务器,并希望将其公钥自动添加到我的本地 known_hosts 文件中。我的服务器在端口2222 上运行。

hosts:

[remotes]
my_server ansible_host:42.42.42.42 ansible_port:2222

playbook.yml:

---
hosts: all
gather_facts: no
tasks:

- name: get host key
  local_action: command ssh-keyscan -t rsa -p {{ansible_port}} -H {{ansible_host}}
  register: host_key

- name: add host key
  when: host_key is success
  delegate_to: localhost
  known_hosts:
    name: "{{item}}"
    state: present
    hash_host: yes
    key: "{{host_key.stdout}}"
  with_items:
    - "{{ansible_host}}"
    - "{{inventory_hostname}}"

这会将新条目添加到known_hosts

ssh 42.42.42.42:2222ssh my_server:2222 仍然显示未知键警告。

我怀疑这是因为 1) 我在非标准端口上运行(known_host 模块的文档没有显示设置端口的选项),或 2) 与散列选项有关.

我该怎么做?

【问题讨论】:

  • "这会将新条目添加到 known_hosts"。由于它不断发出警告,我建议您键入“是”以手动添加密钥,然后比较 2 行(ansible PB 添加的 1 行,ssh 命令添加的 1 行)。您也可以手动运行sh-keyscan -t rsa -p {{ansible_port}} -H {{ansible_host}} 命令并在屏幕上获取输出。
  • @ilias-sp 好主意! ansible 脚本生成的脚本是ssh-rsa,当我键入“yes”时手动生成的脚本是ecdsa-sha2-nistp256。服务器是香草 ubuntu 18.04 LTS。 known_hosts 模块似乎没有指定密钥类型的选项。你建议我做什么?

标签: ansible ssh-keys


【解决方案1】:

我在old issue 中找到了一个解决方案。诀窍是使用[host]:port 而不是host

---
hosts: all
gather_facts: no
tasks:

# add entry to known_hosts for server's IP address
- name: get host key
  local_action: command ssh-keyscan -t rsa -p {{ansible_port}} -H {{ansible_host}}
  register: host_key
- name: add host key
  when: host_key is success
  delegate_to: localhost
  known_hosts:
    name: "[{{ansible_host}}]:{{ansible_port}}"            # <--- here
    state: present
    hash_host: yes
    key: "{{host_key.stdout}}"

# add entry to known_hosts for server's hostname
- name: get host key
  local_action: command ssh-keyscan -t rsa -p {{ansible_port}} -H {{inventory_hostname}}
  register: host_key
- name: add host key
  when: host_key is success
  delegate_to: localhost
  known_hosts:
    name: "[{{inventory_hostname}}]:{{ansible_port}}"      # <--- here
    state: present
    hash_host: yes
    key: "{{host_key.stdout}}"

我找不到避免重复的方法,因为with_items 不能同时应用于多个任务,所以它很难看,但它有效。

这允许ssh 42.42.42.42:2222ssh my_server:2222 没有提示(尽管my_server 必须在/etc/hosts 和/或~/.ssh/config 中定义)。

【讨论】:

    猜你喜欢
    • 2017-09-15
    • 2020-12-13
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 2018-09-09
    • 2016-03-25
    相关资源
    最近更新 更多