是否有一个ansible条件或事实来检查主机是否可以使用SSH成功​​登录到另一台服务器?

时间:2016-03-01 12:57:52

标签: ssh ansible

我需要检查主机是否可以使用SSH成功​​登录到其他服务器。

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:2)

没有这样的事情。如果你考虑一下,用内置事实或其他机制就不可能做到这一点。 Ansible应该如何知道其他主机,使用什么用户名,身份验证方法等...如果Ansible试图让每个主机连接到它所知道的每个其他主机,那将是一种浪费。

您需要编写一个任务并保存输出以供进一步使用。但这实际上应该很容易。

final Class<?> myClass = new ByteBuddy().subclass(Object.class).name("test.MyClass")
    .defineField("myValue", String.class, Visibility.PUBLIC)
    .value("Hello World !")
    .make()
    .load(getClass().getClassLoader(), ClassLoadingStrategy.Default.INJECTION).getLoaded();
Object myObject = myClass.newInstance();

然后您可以在任何其他任务中将该输出用作条件:

- shell: ssh other.host echo awesome that works
  failed_when: false
  register: ssh_test

答案 1 :(得分:0)

没有事实,但您可以使用ping模块。 http://docs.ansible.com/ansible/ping_module.html

答案 2 :(得分:0)

为了扩展@ smiller171提供的答案,这是一个将测试来自target1的SSH(或其他库存配置通信)连接的游戏 - &gt; TARGET2。状态变量将包含可用于确定连接是否失败的信息

- hosts: target2
  tasks:

  - ping:
    delegate_to: target1
    register: status
    ignore_errors: yes

  - debug: msg="target1 failed to communicated with target2"
    when: status | failed