WSL(Ubuntu)与ADS登录凭证集成:实现无密码SSH执行Ansible剧本
解决WSL中Ansible通过企业ADS认证访问主机的问题
以下是几种适配企业网络环境的可行方案,按落地优先级排序:
1. 配置Kerberos认证对接ADS
企业域内的Linux主机通常支持Kerberos认证,直接在WSL中配置Kerberos即可实现无密码SSH:
- 安装Kerberos工具:
sudo apt update && sudo apt install krb5-user - 编辑
/etc/krb5.conf,替换为企业ADS的域配置(示例):[libdefaults] default_realm = YOUR_COMPANY_DOMAIN.COM dns_lookup_kdc = true dns_lookup_realm = true [realms] YOUR_COMPANY_DOMAIN.COM = { kdc = ads-server.your-company-domain.com admin_server = ads-server.your-company-domain.com } - 获取Kerberos票据(输入ADS密码一次):
kinit your-ads-username@YOUR_COMPANY_DOMAIN.COM - 在Ansible inventory或
ansible.cfg中启用GSSAPI认证:# inventory示例 [target_hosts] host1 ansible_host=192.168.1.10 ansible_ssh_user=your-ads-username@YOUR_COMPANY_DOMAIN.COM ansible_ssh_auth_method=gssapi-with-mic # ansible.cfg全局配置 [defaults] ansible_ssh_auth_method = gssapi-with-mic
2. 用Ansible Vault存储ADS凭证做密码认证
如果Kerberos配置繁琐,可直接用密码认证,通过Vault避免明文泄露:
- 创建加密的Vault文件存储ADS密码:
在文件中写入:ansible-vault create group_vars/all/vault.ymlvault_ansible_ssh_pass: your-ads-password - 在
group_vars/all/main.yml中引用Vault变量:ansible_ssh_user: your-ads-username ansible_ssh_pass: "{{ vault_ansible_ssh_pass }}" - 运行剧本时指定Vault密码:
ansible-playbook your-playbook.yml --ask-vault-pass
3. 借助宿主Windows的ADS凭证缓存
如果WSL的宿主Windows已登录企业域,可复用Windows的认证凭证:
- 修改WSL的
~/.ssh/config,让SSH调用Windows的ssh.exe:
这样WSL的SSH会自动使用Windows已登录的ADS凭证,无需重复输入密码,Ansible直接调用该SSH配置即可。Host * ProxyCommand ssh.exe -W %h:%p User your-ads-username@YOUR_COMPANY_DOMAIN.COM GSSAPIAuthentication yes GSSAPIDelegateCredentials yes
4. 将WSL Ubuntu加入企业ADS域(需权限)
如果企业允许,直接把WSL系统加入域,实现系统级ADS认证:
- 安装域加入工具:
sudo apt install sssd-ad realmd adcli - 加入企业域(输入ADS密码):
sudo realm join YOUR_COMPANY_DOMAIN.COM -U your-ads-username - 配置SSSD自动获取Kerberos票据,之后WSL中用ADS用户登录,SSH到域内主机无需额外认证。
内容的提问来源于stack exchange,提问作者Gops
相关产品推荐
相关产品推荐

