使用ssh username@ip连接Vagrant虚拟机时出现Permission denied(publickey)错误
解决SSH直接连接Vagrant虚拟机出现Permission denied (publickey)的问题
我来帮你搞定这个问题~其实原因很简单:Vagrant在创建虚拟机的时候,会生成一套自己的SSH密钥对,vagrant ssh命令会自动使用这套密钥去完成认证;但你直接用ssh ubuntu@192.168.33.71时,系统会尝试用你本地默认的SSH密钥(比如~/.ssh/id_rsa),而虚拟机里的authorized_keys文件只添加了Vagrant自带密钥的公钥,所以就被拒绝啦。
下面给你几种解决办法,选一个适合你的就行:
方法一:指定Vagrant的密钥文件登录
直接在ssh命令里指定Vagrant默认的私钥文件,就能和vagrant ssh一样成功连接:
- 执行以下命令(Linux/macOS):
如果是Windows系统,路径换成你的用户目录下的ssh -i ~/.vagrant.d/insecure_private_key ubuntu@192.168.33.71.vagrant.d,比如:ssh -i C:\Users\你的用户名\.vagrant.d\insecure_private_key ubuntu@192.168.33.71 - 注意:如果Linux/macOS下提示密钥权限过高,先执行这个命令修改权限:
chmod 600 ~/.vagrant.d/insecure_private_key
方法二:把你本地的公钥添加到虚拟机的授权列表
这样之后你就能直接用默认密钥登录,不用每次指定:
- 先通过
vagrant ssh正常进入虚拟机。 - 在宿主机的终端里,复制你本地的SSH公钥内容:
(如果还没有生成密钥对,先执行cat ~/.ssh/id_rsa.pubssh-keygen一路回车生成) - 回到虚拟机的终端,把刚才复制的公钥内容追加到
authorized_keys里:echo "你复制的公钥内容" >> ~/.ssh/authorized_keys - 最后确保权限正确(不然SSH会拒绝):
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
现在退出虚拟机,再执行ssh ubuntu@192.168.33.71就能正常连接了。
方法三:开启虚拟机的密码登录
如果你更习惯用密码登录,可以修改Vagrant配置开启密码认证:
- 打开你的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" # 新增以下配置 config.ssh.password = "ubuntu" # ubuntu/xenial64默认密码是ubuntu config.vm.provision "shell", inline: <<-SHELL sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config sudo systemctl restart sshd SHELL end - 保存后执行以下命令重启虚拟机并应用配置:
vagrant reload --provision
之后再执行ssh ubuntu@192.168.33.71,输入密码ubuntu就能登录了。
内容的提问来源于stack exchange,提问作者itsvks
相关产品推荐
相关产品推荐

