我的等级:
HOST --->(ssh access)---> SERVER
另一端就像是:
SERVER:
--------->NODE1:
--------->NODEA
--------->NODEB
--------->NODEC
--------->NODED
箭头显示ssh访问权限。 HOST只对SERVER进行ssh访问,我正在从HOST运行我的playbook。它没有底层机器的ssh。 SERVER可以ssh到NODE1。服务器无法进入NODEA。我有必须在所有这些机器上运行的任务。
一旦解决方案要完成如下任务:
- name: Do task in NODE1
command: ssh user@NODE1 whoami
但这看起来很不合适。
另一种解决方案是拥有3套剧本。
你能否建议一个更好的替代方案来解决这个问题?
注意:我无法从HOST向所有其他节点添加ssh访问权限。如果是这种情况,那么整个问题就不会出现了。
答案 0 :(得分:1)
它看起来像跳转服务器配置的典型情况:
SERVER上~/.ssh/config
所需的设置:
如果使用OpenSSH版本< 7.3:
Host NODEA
ProxyCommand ssh NODE1 -W %h:%p
如果使用OpenSSH版本> = 7.3:
Host NODEA
ProxyJump NODE1
NODE1上/etc/ssh/sshd_config
中的必需设置(进行更改后需要重启SSH守护程序):
PermitTunnel yes
AllowTcpForwarding yes
在SERVER上运行以通过NODE1连接到NODEA的命令:
ssh NODEA
由于Ansible使用常规SSH命令,因此在NODEA目标上运行时也可以使用。
如果要在HOST上本地运行Ansible,则可以添加另一个跃点。例如(> 7.3):
Host NODEA
ProxyJump SERVER, NODE1
如果您想使用来自HOST的SSH密钥,您可以在主机上AgentForwarding
进一步改进(以及NODE1上的AllowAgentForwarding yes
。
此外,您可以在~/.ssh/config
中使用通配符来匹配多个主机。