到目前为止我已经测试过的东西

到目前为止我已经测试过的东西

我有一台 ansible 控制机器(主机 A),需要与主机 C 通信,主机 C 是一台没有本地用户的 Windows 机器(它是一个 Active Directory)。

主机 A 无法通过网络访问主机 C,但可以使用主机 B 进行通信。

host-B 是一台 Linux 机器。

主机A通过ssh访问主机B。

按照此文章我已经创建了一个 nginx 服务器来路由 WinRM 流量主机-B

server {
    listen 5986 default ssl;
    server_name localhost;

    ssl_certificate  ssl/nginx.crt;
    ssl_certificate_key ssl/nginx.key;

    location /host-c {
        proxy_pass https://host-c-address:5986/wsman;
    }
}

我的 host-C 的 ansible 清单如下:

[windows]
host-c ansible_host=host-b ansible_winrm_path=host-c

对于group_varsWindows 来说:

ansible_user: myuser
ansible_pass: andmypass
ansible_port: 5986
ansible_connection: winrm
ansible_winrm_realm: HOSTCDOMAIN.LOCAL
ansible_winrm_scheme: https
ansible_winrm_transport: kerberos
ansible_winrm_server_cert_validation: ignore

到目前为止我已经测试过的东西

1 不使用 Kerberos 的测试

改变了这一行: ansible_winrm_transport: ssl

这是不可能的,因为 host-c 不能有本地用户。

fatal: [host-c]: FAILED! => {"failed": true, "msg": "ssl: 401 Unauthorized."}

2 创建 NAT,将 kerberos 88 端口路由到主机 C

有了这个,我可以使用 Kerberos 客户端验证我的用户,但不能在 ansible 内部验证

krb5.conf:

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = HOSTCDOMAIN.LOCAL
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = false

[realms]
 HOSTCDOMAIN.LOCAL = {
  kdc = host-b
 }

[domain_realm]
 .hostcdomain.local = HOSTCDOMAIN.LOCAL

使用本地 Kerberos

# kinit [email protected]
Password for [email protected]:

# klist

Ticket cache: FILE:/tmp/krb5cc_0
Default principal: [email protected]

Valid starting       Expires              Service principal
03/12/2016 20:23:35  03/13/2016 06:23:35  krbtgt/[email protected]
    renew until 03/19/2016 20:23:31

Ansible 测试ansible_winrm_transport: kerberos

e# ansible-playbook test_win.yml -vvv
Using /etc/ansible/ansible.cfg as config file
1 plays in test_win.yml

PLAY [Ping windows] ************************************************************

TASK [ping] ********************************************************************
task path: /etc/ansible/test_win.yml:5
<host-b> ESTABLISH WINRM CONNECTION FOR USER: myuser on PORT 5986 TO host-b
fatal: [host-c]: FAILED! => {"failed": true, "msg": "kerberos: (('Unspecified GSS failure.  Minor code may provide more information', 851968), ('Server not found in Kerberos database', -1765328377))"} 

有人能帮我解决这个问题吗?我想我漏掉了一些东西。

主机 a 可以使用主机 b 在主机 c 上进行身份验证吗?

答案1

您是否尝试过使用委托给? 到主机-B? 如果有,结果如何?

delegate_to:主机-B

相关内容