Vagrant provision shell:无法运行ssh副本id

Vagrant provision shell:无法运行ssh副本id,vagrant,ansible,devops,Vagrant,Ansible,Devops,我有一个sinpleVagrant文件,它创建了3个实例: config.vm.define "node1" do |subconfig| subconfig.vm.box = "ubuntu/trusty64" subconfig.vm.network "private_network", ip: "192.168.33.10" end config.vm.define "node2" do |subconfig| subconfig.vm.box = "ubuntu/tru

我有一个sinple
Vagrant
文件,它创建了3个实例:

config.vm.define "node1" do |subconfig|
    subconfig.vm.box = "ubuntu/trusty64"
subconfig.vm.network "private_network", ip: "192.168.33.10"
end

config.vm.define "node2" do |subconfig|
    subconfig.vm.box = "ubuntu/trusty64"
subconfig.vm.network "private_network", ip: "192.168.33.11"
end

 config.vm.define "master" do |subconfig|
     subconfig.vm.box = "ubuntu/trusty64"
subconfig.vm.network "private_network", ip: "192.168.33.9"
subconfig.vm.provision :shell, path: "install.sh"
end
在主节点上,我想生成ssh密钥,然后将其复制到其他两个节点。我的供应shell(install.sh):

但我在运行最后一行时遇到了这个错误:

> master: /usr/bin/ssh-copy-id: ERROR: No identities found

但是,如果我使用ssh连接到主节点,然后再次运行install.sh,一切都很好。我认为这可能是关于用户权限时运行的流浪汉。如何修复它?

您遇到了一个问题,您正在使用
root
用户运行脚本,但被推到了vagrant文件夹中,因此您感到困惑

在您的Vagrantfile脚本中添加
privileged:false

subconfig.vm.provision :shell, path: "install.sh", privileged: false
因此,它将使用
vagrant
用户而不是root用户运行,然后您不需要更改密钥的权限(删除
sudo chmod-R 755/home/vagrant/.ssh

小提示:如果您对所有3台机器使用同一个框,您可以使用一个公共变量并删除所有行的
subfig.vm.box=“ubuntu/trusty64”


我猜,
install.sh
是以特权用户(默认)身份运行的,而是在寻找
/root/.ssh/id\u rsa
。使用
-i/home/vagrant/.ssh./id\u rsa.pub
指定标识文件。这是错误的
sudo chmod-R 755/home/vagrant/.ssh
。您打开的
id\u rsa
权限过多。宋承宪也不行。另外,如果用户是root用户,那么默认情况下ssh副本id将在root的主文件夹中查找.ssh
subconfig.vm.provision :shell, path: "install.sh", privileged: false
config.vm.box = "ubuntu/trusty64"

config.vm.define "node1" do |subconfig|
    subconfig.vm.network "private_network", ip: "192.168.33.10" 
end
...