Vagrant:权限被拒绝(公钥)

17

当我用 ssh username@ip 做 ssh 时,我遇到了 Permission denied (publickey) 错误, 但是在使用 vagrant ssh 时,ssh 是正常工作的。

VagrantFile:

Vagrant.configure("2") do |config|
 config.vm.box = "ubuntu/xenial64"
 config.vm.network "forwarded_port", guest: 80, host: 8071
 config.vm.network "private_network", ip: "192.168.33.71"
end

我正在终端上尝试使用ssh ubuntu@192.168.33.71

出现错误:Permission denied (publickey)


可能是如何在不实际运行“vagrant ssh”情况下ssh到vagrant?的重复问题。 - Matt Schuchard
我曾经不幸地与那个盒子一起工作,并花了很多时间尝试调试它。它的基本结构混乱不堪。我建议你尝试另一个盒子。 - LalienX
9个回答

13

在连接vagrant虚拟机时,请使用私钥。

ssh -i .vagrant/machines/default/virtualbox/private_key vagrant@192.168.33.71


11
config.vm.synced_folder '.' and '/home/vagrant/' caused this problem.
Because the configure makes home directory on the host overwritten and destroy .ssh settings on the host.
I got the same problem a few seconds ago. I checked the .ssh was overwritten by Vagrant GUI.

总之,你同步的文件夹将覆盖虚拟机中的 .ssh 文件夹,因此你不能使用 ssh 登录。

答案来自这个问题


虽然这个答案对我有所帮助,但你应该粘贴有用的细节来帮助你;我已经为你编辑了答案。 - wal

5
请简要说明您的问题,从哪里到哪里您正在使用SSH。如果您是通过Vagrant box进行SSH连接,则在任何命令之前都必须使用vagrant。在使用vagrant时ssh ubuntu@192.168.33.71将无法工作。

vagrant ssh user@vmmachine

如果您使用的用户与默认的vagrant用户不同,则必须将主机机器的公钥内容复制到客户机用户的authorized_keys文件中。(仅在使用vagrant连接到客户端时使用)
授权密钥的默认位置:

/home/ubuntu/.ssh/authorized_keys


3
我猜测如果您尝试像@Anurag提到的那样使用vagrant ssh,您就能够连接了。
为了解决Permission denied (publickey)错误,以便您可以从主机的任何位置ssh到虚拟机中,您可以创建一个ssh密钥并将公钥复制到客户端的authorized_keys文件中。 ssh-keygen命令可以选择不同的文件来保存密钥。 然后使用ssh-add <path to your key>添加身份验证。

不是最好的解决方案,但您可以尝试使用标志-A,该标志会添加所有身份。也许如果我们能看到实际的错误,可能有助于了解问题。 - Kanyi
在使用vagrant ssh进入项目文件夹时,我遇到了与原始项目文件夹完全一样的“Permission denied(publickey)”问题,而该项目文件夹是通过在Windows上复制/粘贴而制作的。 - Chupo_cro

3
config.vm.provision :shell, :inline => "sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config; sudo systemctl restart sshd;", run: "always"

我能够通过上述配置进行解决。

0

我在使用debian/jessie64虚拟机时遇到了同样的问题。我是在libvirt上运行Vagrant。我尝试了所有方法,但都没有帮助,然后我换成了centos/7虚拟机,一切正常。我猜测这可能与虚拟机中的cloud-init配置不正确有关。


0

同一个错误的另一个原因和解决方案

我遇到了同样的错误,但是没有一个解决方案对我来说有意义。在我的情况下,根本原因是Windows中私钥的权限。默认情况下,该密钥允许“Everyone”访问。这使得密钥不安全,ssh不喜欢这样。因此,我移除了密钥的所有其他用户权限。仅允许我的Windows用户读写。然后一切都按预期工作了。


-1
我在这里尝试了一切,但都没有成功。所以我回到了Vagrant Cloud,并下载了另一个Ubuntu18的包,它在要求密码(即vagrant)后成功运行了。

-1
假设您的主机上的家目录中已经有了id_rsa.pub密钥,那么您可以像这样简单地配置Vagrantfile:
config.vm.provision "file", source: "~/.ssh/id_rsa.pub", destination: "/home/vagrant/.ssh/id_rsa.pub"
config.vm.provision :shell, :inline => "cat /home/vagrant/.ssh/id_rsa.pub >> /home/vagrant/.ssh/authorized_keys", run: "always"

接下来,您将能够使用 ssh vagrant@vm_ip_address 进行 SSH。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接