我有一台机器,只能通过ipv6访问。它是使用rsa密钥为ssh设置的。现在,我想用ansible管理它。不幸的是,清单文档中未涵盖此内容。

所以我尝试了以下排列:


docker_test ansible_host=fe80::88ea:e002:b409:4be0
docker_test ansible_host=[fe80::88ea:e002:b409:4be0]
docker_test ansible_host=\[fe80::88ea:e002:b409:4be0\]

没有一个可行的为比较起见,我添加了我的.ssh/config条目:

Host docker_host
    AddressFamily inet6
    HostName fe80::88ea:e002:b409:4be0
    BindAddress fe80::3e6b:335a:d2f7:3a75%enp3s0


我在问题跟踪系统中发现了两个已关闭的错误,这些错误指示问题至少已部分解决:3879、3888

任何对此主题的建议都将受到高度赞赏。

评论

您是否尝试使用库存文件?并请告诉我们您遇到的错误。

是的,我确实尝试过使用清单文件。发布的三个排列从那里开始。异常含糊不清,说明清单文件中的格式错误或ssh客户端的参数错误。

IPv6地址缺少必需的作用域ID。当然,您应该尽可能避免使用本地链接地址。

#1 楼

该博客文章介绍了所有方法:

摘录-Ansible 2中的主机名和模式


库存主机名

Ansible 2要求清单主机名是有效的IPv4 / IPv6地址或主机名(即x.example.com或x,但不是x..example.com或x--)。作为扩展,它在主机名标签中接受Unicode单词字符。任何错误都会导致特定的解析错误,而不是执行过程中的神秘错误。

库存主机名还可以使用字母或数字范围来定义多个主机。例如,foo [1:3]定义foo1到foo3,而foo [x:z:2]扩展为fox和foz。地址可以使用以下数字范围:192.0.2。[3:42]。它们的行为已在清单(.ini文件)和剧本(例如,在主机中:行和使用add_host)中保持一致。支持各种压缩形式的位)。带端口号的地址必须写为[addr]:port。您还可以使用十六进制范围来定义清单文件中的多个主机,例如9876 :: [a:f]:2。

几个小的但必要的错误修正与解析更改紧密结合,并解决了将IPv6地址传递到ssh和rsync的问题。综上所述,这些更改使在Ansible中实际使用IPv6成为可能。


因此可以允许使用这些IPv6这样的模式:完全指定的128位地址
[addr]:port各种形式的压缩范围-FF01 :: [1:6]

简化示例:

# IPv6 Address                                # Simplified Notation
-----------------------------------------     ----------------------------
- FF01:0000:0000:0000:0000:0000:0000:0001     - FF01::1
- 2031:0000:130F:0000:0000:09C0:876A:130B     - 2031:0:130F::9C0:876A:130B
- 0000:0000:0000:0000:0000:0000:0000:0001     - ::1
- FE80:0000:0000:5EFE:0192.0168.0001.0123     - FE80::5EFE:192.168.1.123
- FE80:0000:0000:0000:1585:4868:495F:D521     - FE80::1585:4868:495F:D521


参考文献


网络基础:IPV6地址简化表示法