这个问题本来觉得是个特别简单的问题,昨天弄的时候折腾了半晚上。所以打算记录下过程,主要也被网上的各种信息误导了。

1

先看下我这vagrant配置信息

Vagrant.configure("2") do |config|
config.vm.box = "base"
config.vm.box_check_update = false
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "private_network", ip: "192.168.0.1"
config.vm.synced_folder "/data/www", "/data/www"
# config.vm.provision "shell", inline: <<-SHELL
# apt-get update
# apt-get install -y apache2
# SHELL
end

发现没有登录信息,然后网上查了下资料说是默认的登录用户名是vagrant,密码一样。就像下面。

config.ssh.username = "vagrant"
config.ssh.password = "vagrant"

配置上上面的信息然后 vagrant ssh登录,发现登录正常没有问题。修改root的密码。

sudo -s
passwd

改完之后按照网上信息修改

vim /etc/ssh/sshd_config
PermitRootLogin prohibit-password
改为
PermitRootLogin yes
重启ssh服务
service sshd restart

退出,修改vagrant登录信息

config.ssh.username = "root"
config.ssh.password = "密码"
然后
vagrant ssh
提示
root@127.0.0.1: Permission denied (publickey).

不允许登录。一直没搞明白。后来又仔细看了下

/etc/ssh/sshd_config

发现有个关于密码的配置

PasswordAuthentication no

意思应该是密码授权,打开这个配置试试

PasswordAuthentication yes
记着重启服务
service sshd restart

然后改配置用户名

config.ssh.username = "root"

config.ssh.password = "密码"

这次看着是对了,提示输入root密码,输入完之后,就可以直接登录了。

2

等等,我不是配置密码了么?为什么还提示我输入密码

config.ssh.password = "密码"

换成 vagrant 用户名,试着注释掉密码配置,照样正常登录。在换成root用户名,注释掉密码配置,提示输入密码,说明密码登录的配置没有实际意义,配不配置都需要手动输入密码。

但是,vagrant用户为什么可以不需要密码直接登录,可能vagrant默认是秘钥登录的。使用vagrant账号登录看看vagrant的秘钥登录配置。

vim ~/.ssh/authorized_keys
果然有秘钥配饰
JbDoShF6plkIvZfV1ol3OMGYRtG8V/fYOCgfv9VBHmBVda+yIuybtD vagrant

证实了我们的猜测,vagrant默认是秘钥登录,密码配置没有任何意义。

那我们怎么将我们的root用户也改为秘钥登录呢?

下面我们看下配置步骤

首先使用 root输密码登录

vim /etc/ssh/sshd_config
打开两个关于秘钥的配置
RSAAuthentication yes
PubkeyAuthentication yes 配置公钥
vim ~/.ssh/authorized_keys
将自己的公钥添加到这里。
重启服务
service sshd restart
exit
退出虚拟机

修改vagrant配置数据,注释密码,加上私钥地址,

config.ssh.username = "root"
#config.ssh.password = "vagrant"
config.ssh.private_key_path = "/Users/XXX/.ssh/id_rsa"

不出意外,就可以跟vagrant用户一样免密登录了。

有时候会提示输入私钥密码,说明没有找到私钥地址,做下添加私钥的操作就可以了。

sudo ssh-add -K ~/.ssh/id_rsa

是不是就可以秘钥免密登录了???

vagrant root 登录虚拟机的更多相关文章

  1. Vagrant 入门 - 启动 vagrant 及 通过 ssh 登录虚拟机

    原文地址 在终端运行 vagrant up 命令即可启动 Vagrant 环境: $ vagrant up 不到一分钟,命令就会执行完毕,运行 Ubuntu 的虚拟机会启动成功.Vagrant 运行虚 ...

  2. WIN10 vagrant和virtualbox虚拟机和一键搭建lnmp环境配置thinkphp虚拟主机

    版本:win10系统 virtualbox:5.1.26 vagrant :1.9.7 centos 7.0 xshell/git 首先下载好对应版本的软件 配置vagrant和virtualbox ...

  3. centos root登录password 忘记解决的方法

    Centos系统 登陆root忘记password 解决方式: (1)开机启动系统,在进入linux系统之前按键Esc 进入例如以下界面:(须要注意:Centos是安装在虚拟机里面的话,须要将鼠标点进 ...

  4. linux自动以root登录,并自动启动用户程序的设置方法

    系统自动以root登录,并自动启动用户程序的设置方法 第一步:删除root用户 vi /etc/passwd 该文件的第一行:root:X:0:0:root:/root:/bin/bash,只需要把第 ...

  5. Ubuntu 12.04 添加新用户并启用root登录

    启动root sudo passwd 输入密码 输入root 新密码并重复 su 切换root 添加用户比如hduser 修改密码hduserchmod u+w /etc/sudoersvi sudo ...

  6. 配置sshd_config中的PermitRootLogin设置root登录或者禁止root登录

    在etc的sshd_config文件中,默认有PermitRootLogin no的配置,这个的意思是禁止root用户登录,如果想要允许root登录,需要su root用户到sshd_config下进 ...

  7. Ubuntu 12.04 root默认密码? 如何使用root登录?

    在安装Ubuntu 12.04时并没有设置root的密码,登录的时候也没有使用root账户.当我们使用root权限时,一般都使用sudo命令进行.那么当我们安装完毕Ubuntu 12.04时,root ...

  8. Ubuntu下怎样切换到ROOT登录

    原文:http://james23dier.iteye.com/blog/721246 近期一直在学习linux,选择ubuntu作为联系的操作系统.然后一直发现自己所创建的用户和root用户不是一个 ...

  9. LINUX服务器下用root登录ftp

    因为安全方面的原因,root用户是默认不能登录ftp服务的. 如果一定要用root登录,则: 1.删除或注释/etc/vsftpd.ftpusers中的root 2.删除或注释/etc/vsftpd. ...

随机推荐

  1. PHP用strtotime()函数比较两个时间的大小实例详解

    在PHP开发中,我们经常会对两个时间的大小进行判断,但是,在PHP中,两个时间是不可以直接进行比较,因为时间是由年.月.日.时.分.秒组成的,所以,如果需要将两个时间进行比较的话,我们首先要做的就是将 ...

  2. 自定义Hooks函数获取窗口大小(十一)

    其实自定义Hooks函数和用Hooks创建组件很相似,跟我们平时用JavaScript写函数几乎一模一样,可能就是多了些React Hooks的特性,自定义Hooks函数偏向于功能,而组件偏向于界面和 ...

  3. useEffect 实现 componentWillUnmount生命周期函数(四)

    在写React应用的时候,在组件中经常用到componentWillUnmount生命周期函数(组件将要被卸载时执行).比如我们的定时器要清空,避免发生内存泄漏;比如登录状态要取消掉,避免下次进入信息 ...

  4. 信息论 | information theory | 信息度量 | information measures | R代码(一)

    这个时代已经是多学科相互渗透的时代,纯粹的传统学科在没落,新兴的交叉学科在不断兴起. life science neurosciences statistics computer science in ...

  5. Android日期操作

    第一种方法 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");// ...

  6. lua:写了个基于协程的task调度库

    写了一个(不完整的)基于协程的task调度库 sample code如下 my_spawn( function () print('f: 1') local t1 = my_spawn( functi ...

  7. jenkins关联shell命令修改pom项目版本

    #获取pom文件内的项目版本 version=`awk '/<version>[^<]+<\/version>/{gsub(/<version>|<\/ ...

  8. PHP 对象接口

    对象接口 (interface) 使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容. 接口是通过 interface 关键字来定义的,就像定义一个标准的类 ...

  9. Typora 精美而强大的Markdown编辑器

    Typora 精美而强大的Markdown编辑器  转 https://www.jianshu.com/p/45e284645d30 Markdown编辑器千千万,可是有颜值.功能强并且免费的,就没有 ...

  10. 手机wifi连上Fiddler后无网络问题解决

    早上老板交代一个任务,对一款app抓包分析下接口调用的时延.我的重新打开了一年多前用过的Fiddler(参见win10笔记本用Fiddler对手机App抓包),拿过测试手机开始设置wifi代理地址和端 ...