当我尝试在Windows/Cygwin上使用Ansible配置一个流浪VM时,由于密钥文件权限,SSH失败

当我尝试在Windows/Cygwin上使用Ansible配置一个流浪VM时,由于密钥文件权限,SSH失败,cygwin,vagrant,ansible,Cygwin,Vagrant,Ansible,我在Windows8下使用Cygwin(Cygwin\u NT-6.3-WOW64)。我也在运行Vagrant(1.7.2)和Ansible(1.8.4)。完整地说,我的Virtualbox是4.3.22 Cygwin和Vagrant已从各自的Windows安装包中安装。我在Cygwin下运行Python 2.7.8,并使用“pip install ansible”安装ansible 所有这些应用程序本身都可以正常工作。西格温工作出色;我整天都用它当外壳,每天都没有问题 当我在Cygwin下运行

我在Windows8下使用Cygwin(Cygwin\u NT-6.3-WOW64)。我也在运行Vagrant(1.7.2)和Ansible(1.8.4)。完整地说,我的Virtualbox是4.3.22

Cygwin和Vagrant已从各自的Windows安装包中安装。我在Cygwin下运行Python 2.7.8,并使用“pip install ansible”安装ansible

所有这些应用程序本身都可以正常工作。西格温工作出色;我整天都用它当外壳,每天都没有问题

当我在Cygwin下运行Vagrant时,Vagrant和Virtualbox也可以正常工作。Ansible在Cygwin下也可以很好地工作,当我对网络上的服务器运行游戏或模块时

我遇到的问题是,当我尝试使用Ansible提供本地运行的流浪VM时

例如,我在一个虚拟机上游荡,然后起草一个简单的剧本来提供它。以下是文件:

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.define :drupal1 do |config|
  config.vm.box = "centos65-x86_64-updated"
  config.vm.hostname = "drupal1"
  config.vm.network "forwarded_port", guest: 80, host: 10080
  config.vm.network :private_network, ip: "192.168.56.101"
  config.vm.provider "virtualbox" do |v|
    v.name   = "Drupal Server 1"
    v.memory = 1024
  end
  config.vm.provision :ansible do |ansible|
    ansible.playbook = "provisioning/gather_facts.yml"
  end
end
和剧本:

---
- hosts: all
  gather_facts: yes
但是,当我运行“vagrant provision drupal1”时,我得到以下错误:

流浪规定 ==>drupal1:正在运行provisioner:ansible。。。pythonunbuffer=1 ANSIBLE\u FORCE\u COLOR=true ANSIBLE\u HOST\u KEY\u CHECKING=false ANSIBLE_SSH_ARGS='-o UserKnownHostsFile=/dev/null-o ControlMaster=auto-o ControlPersist=60s的ansible playbook --私钥=C:/Users/mjenkins/workspace/Vagrant\u VMs/Drupal1/.Vagrant/machines/Drupal1/virtualbox/private\u key --user=vagrant--connection=ssh--limit='drupal1'--inventory file=C:/Users/mjenkins/workspace/vagrant\u VMs/drupal1/.vagrant/provisioners/ansible/inventory 设置/收集事实。yml播放[全部] 收集事实 致命:[drupal1]=>私钥文件 (C:/Users/mjenkins/workspace/Vagrant\u VMs/Drupal1/.Vagrant/machines/Drupal1/virtualbox/private\u key) 组可读还是世界可读,因此不安全-你会 可能会得到一个SSH故障重述

要重试,请使用:--limit@/home/mjenkins/gather\u facts.retry

drupal1:ok=0 changed=0 unreachable=1
失败=0 Ansible未能成功完成。任何错误输出 应该可以在上面看到。请修复这些错误,然后重试。 从错误的角度来看,很明显这与此有关 Ansible对我的密钥和上的文件权限的解释 它或其所在的文件夹

以下是我尝试过的一些观察结果和步骤:

  • 我尝试在Cygwin中设置该文件的权限和指向该文件的所有目录。即项目目录中的
    chmod-r700.vagrant
    。还是有同样的错误

  • 正在使用Windows路径而不是Cygwin路径引用密钥文件(不过,limit输出中的文件具有Cygwin路径,这很奇怪)。因此,我从Windows端检查了权限,并对其进行了更改,使“每个人”都无法访问.vagrant及其下的所有文件/文件夹。还是有同样的错误

  • 然后我认为我基于Cygwin的Ansible之间的文件权限/路径可能仍然存在一些问题,所以我安装了Python for Windows;使用该pip安装Ansible,设置到该位置的路径,创建Ansible-playbook.bat文件,并从Windows cmd shell运行Vagrant。很高兴说工具链起作用了……但我还是遇到了同样的问题

  • 在这一点上,我只是想不出主意,所以我转向你们,Stackoverflow的朋友们,征求你们的意见


    解决这个问题有什么想法吗?

    您的私钥非常开放,任何人都可以访问。签入SSH客户端可防止使用此类密钥

    尝试从cygwin或git bash使用chmod更改私钥和公钥的权限。 在
    C:/Users/mjenkins/workspace/Vagrant\u VMs/Drupal1/.Vagrant/machines/Drupal1/virtualbox/private\u key

    使用
    chmod 700私钥
    并确保您拥有
    -rwx-----
    ls-la
    baah!我刚刚把登机手续注释掉了

    然后我必须添加
    ansible.cfg
    
    [ssh_连接]
    控制路径=/tmp
    

    我遇到了类似的问题,并找到了解决方案。我在我的流浪者文件中添加了以下条目

    config.ssh.insert_key = false
    
    config.ssh.private_key_path = "~/.vagrant.d/insecure_private_key"
    
    并将不安全的\u私钥从我的windows用户文件夹复制到cygwin home,路径如上所示。后来我做了一个

    chmod 700 ~/.vagrant.d/insecure_private_key
    
    作为最后一步,我在cygwin home中删除了这个文件的内容

    ~/.ssh/known_hosts
    

    重新运行ansible playbook命令后,我确认将我的本地主机添加回已知的主机,ssh连接工作。

    确实说,如果您了解发生了什么,这会简单得多

  • Vagrant保留一个文件夹,用于与主机和其他VM共享文件,即/Vagrant。任何进入777模式的操作都无法实现。sudo chmod也没有帮助,您无法更改模式

  • Ansible要求您减少模式,使其不能被组或所有组读取

  • 因此,这就像从中复制私钥一样简单 /流浪者/流浪者/机器/你的机器/虚拟箱或任何供应者/ to可能是家,即~或/根


    然后将chmod更改为700,并在主机文件的资源清册列表中使用它。

    我的解决方案是使用以下设置覆盖
    VagrantFile
    中同步文件夹的权限设置:

    Vagrant.configure(2) do |config|
      config.vm.synced_folder "./", "/vagrant", 
         owner: "vagrant",
         mount_options: ["dmode=775,fmode=600"]
         ...
    

    我最近也遇到过类似的错误。这是由于在1.8版的Ansible中添加了一个额外的检查。如果将Ansible降级到1.7.X,问题就会消失。Ansible并不打算在Windows(控制节点)上运行,所以从形式上讲它不是一个bug,但是我仍然在考虑打开一个问题。感谢您的输入,@MarcinPłonka。不过,就我的情况而言,我不确定这是否有可能。我更倾向于在窗台上流浪。当我从命令行使用ansible和Vagra生成的清单和私钥时