Ubuntu物理机中解决VirtualBox虚拟机无法连接USB设备的问题

问题描述:

在安装完VirtualBox的USB控制器扩展(关于在VirtualBox中安装USB控制器扩展的方法可以查看我的这篇文章:http://zhaokaifeng.com/?p=443),并且在设置里打开了“启用USB控制器”的情况下,插入USB设备(如U盘)后,启动虚拟系统,在“设备->USB”里没有找到该USB设备。

解决方法如下:

1 添加Ubuntu当前登陆用户到usbfs用户组:

sudo adduser xxx usbfs

2 添加Ubuntu当前登陆用户到usbfs用户组:

sudo adduser xxx vboxusers

注:系统当前登陆用户即命令提示符中xxx@yyy 中@ 前面的xxx 。也可以使用whoami 查看当前登陆用户的用户名。

3
关闭虚拟系统;
重启Ubuntu物理机;
插入U盘,启动虚拟机,发现可以连接USB设备,问题解决。

VirtualBox不能为虚拟电脑打开一个新任务——The VirtualBox kernel modules do not match this version of VirtualBox

一、问题产生的环境

物理机操作系统:Ubuntu 17.10
(Ubuntu版本查看命令:cat /etc/issue )

二、问题产生的背景

我目前使用的主力操作系统是Ubuntu,原来安装的VirtualBox是在Ubuntu的软件中心里下载的,但是无法安装VirtualBox 5.2.8 Oracle VM VirtualBox Extension Pack 这个扩展,所以也无法在虚拟机中使用U盘。为了解决这个问题,我在这里下载了Ubuntu 17.04 (“Zesty”) / 17.10 (“Artful”) 的AMD64位版本并进行了安装(安装之前只是关闭了本机正在运行的VirtualBox并没有卸载原来的VirtualBox),安装完成后又下载安装了VirtualBox 5.2.8 Oracle VM VirtualBox Extension Pack 这个扩展并进行了安装。至此上述下载和安装步骤并没有报错,但是我在启动虚拟系统时却出现了报错(具体报错内容见下文)。

三、报错内容

VirtualBox - Error In supR3HardenedMainInitRuntime

RTR3InitEx failed with rc=-1912 (rc=-1912)

The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing

'/sbin/vboxconfig'

may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.

where: supR3HardenedMainInitRuntime what: 4 VERR_VM_DRIVER_VERSION_MISMATCH (-1912) - The installed support driver doesn't match the version of the user.

不能为虚拟电脑 CentOS2_DHCP1 打开一个新任务.

The virtual machine 'CentOS2_DHCP1' has terminated unexpectedly during startup with exit code 1 (0x1).

返回 代码: NS_ERROR_FAILURE (0x80004005)
组件: MachineWrap
界面: IMachine {85cd948e-a71f-4289-281e-0ca7ad48cd89}

四、报错分析

根据上述报错信息我们知道,有可能是安装新的VirtualBox之前没有卸载原来的VirtualBox导致了VirtualBox内核版本的不匹配。此时,最简单直接的解决办法就是将本机上现有的VirtualBox以及相关扩展和依赖关系都清除,然后重新安装。(我之前在Windows上使用VirtualBox时也遇到过“VirtualBox不能为虚拟电脑打开一个新任务”的报错,但是当时的报错是因为我打开了虚拟机的USB控制器,却没有安装相应的扩展。关于当时的报错内容和解决办法可以点击这里

五、解决步骤

1 关闭VirtualBox.

2 卸载VirtualBox:

sudo apt-get autoremove virtualbox-5.2

注:上述操作将自动卸载VirtualBox及其相关依赖。

3 更新系统:

sudo apt-get update

sudo apt-get upgrade

4 安装VirtualBox
通过下载的.deb安装包重新安装VirtualBox

5 安装USB控制器扩展
关于USB控制器扩展VirtualBox 5.2.8 Oracle VM VirtualBox Extension Pack的作用和安装方法,可以查看我的这篇文章Click Here.

之后再次启动虚拟系统,没有出现报错,问题解决。

天堂亦有星辰 ——致敬斯蒂芬·威廉·霍金

斯蒂芬·威廉·霍金 | 荒原之梦
斯蒂芬·威廉·霍金
Stephen William Hawking
1942年01月08日,天文学家伽利略逝世300周年纪念日。
1942年01月08日,斯蒂芬·威廉·霍金出生。
1879年03月14日,阿尔伯特·爱因斯坦在德国符腾堡王国乌尔姆市出生。
2018年03月14日,斯蒂芬·威廉·霍金辞世。
 
天下所有的平凡都是一样的平凡,但天下所有的伟大却不尽是一样的伟大。对于一个21岁就患上肌肉萎缩性侧索硬化症的人而言,无论此生平凡或是伟大,都注定要走上一条艰苦卓绝的道路。霍金战胜了不可能战胜的命运,同时也取得了伟大的创造,虽不知是否后无来者,但一定是前无古人。
 
我曾在高中时阅读完了霍金写的《时间简史》,书中对宇宙精彩绝伦的描述不止一次的更新了我对于世界的认知。在《时间简史》中我接触到了活生生的,真正美丽的科学,而不是冷冰冰的试卷和刻板僵硬的氛围。正是霍金在书中对时间和空间的描绘不断地激发了我对于科学与技术的热爱——希望能理解宇宙间万事万物本真的冲动影响了我后来绝大多数的决定,正如霍金先生所说:“我的目标很简单,就是把宇宙整个明白——它为何如此,它为何存在。”
 
我从未在心中确立一个不可撼动的偶像,因为我认为真正永恒的是我们可能永远无法触及的,那个身处宇宙深处的神。但是,如果真的要确立一个地球人的话,那这个人一定是霍金。
 
斯人已逝,然思想犹存。霍金是一位永远高耸的巨人,即便他的灵魂被束缚在了轮椅之上,仍然闪烁着深邃的光芒,在黑洞边缘的“霍金辐射”上诠释着宇宙的美妙。
 
致敬,向那宏伟的宇宙致敬!
致敬,向Stephen William Hawking致敬!

CentOS-7修改主机名

方法一(修改静态主机名):

vi /etc/hostname

注:由于静态主机名是系统初始化时从/etc/hostname中读取的,所以修改其中的内容为自己想要的主机名即可实现对静态主机名的修改。

之后reboot以生效。

方法二(修改瞬态主机名):

hostname aaa

注:aaa为新主机名。

查看主机名:

hostname

上述命令查看主机名发现显示的主机名是aaa ,但是命令行提示符前面的主机名并没有改变。此时如果是在纯文本界面,使用Alt+Fn+F3 或Alt+F3 组合键即可以新的主机名(aaa)进行登陆,如果在图形化界面中,直接打开一个新的模拟终端就可以看到新的主机名(aaa)了。

注:reboot后,该方法所做的修改失效。

方法三(使用hostnamectl修改主机名):

hostnamectl是CentOS-7中新增的一个用于修改主机名的指令。在CentOS中有“static静态”、“transient瞬态”和“pretty灵活”三种主机名命名方式(在static和transient形式的主机名中不允许出现特殊字符和空格,而在pretty形式的主机名中则没有这些限制,pretty形式的主机名只是用于展示给终端用户。),使用hostnamectl可以很方便的修改这三种状态的主机名。

同时修改static, transient, pretty三种形式的主机名:

hostnamectl set-hostname aaa

仅修改静态形式主机名:

hostnamectl --static set-hostname aaa

仅修改瞬态形式主机名:

hostnamectl --transient set-hostname aaa

仅修改灵活形式主机名:

hostnamectl --pretty set-hostname aaa

注:使用方法三修改后需reboot以生效。

SSH免密码登录Linux服务器

操作环境

客户机操作系统:Ubuntu Linux
服务器操作系统:CentOS Linux

原理说明

免密登陆其实就是使用密钥文件代替密钥进行身份验证。这里的密钥文件就是公钥和对应的私钥,将公钥部署在远程服务器上,私钥部署在客户机上。在服务器和客户机上配置好密钥文件后,当客户机向服务器发起连接请求的时候,客户机会向服务器表达使用密钥文件进行身份验证的请求并向服务器发送公钥;随后,服务器会在客户机对应用户的主目录下找寻公钥文件并与收到的公钥文件进行对比;如果公钥文件的对比结果一致,服务器会使用公钥加密一个文件发送给客户机;客户机在收到公钥加密的文件后使用自己的私钥进行解密,然后将解密后的内容发送给服务器;如果服务器收到的解密内容与原内容一致则身份验证成功,两台计算机之间成功建立连接。

实现方法

使用ssh-keygen 生成公钥与私钥,将公钥部署在服务器上,私钥部署在客户机上。

具体步骤

1.生成密钥文件
命令:

ssh-keygen -t rsa -P "password"

之后弹出提示:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/yourname/.ssh/id_rsa):

此时如果不希望改变密钥文件的默认保存路径则直接回车即可。

注0:上述命令中的password是用于加密私钥的密码。为了尽可能保证私钥不被非授权使用,我建议在创建密钥文件时务必设置加密私钥的密码,不可省略。

这时,在/home/yourname/.ssh/id_rsa 目录下就可以看到id_rsa 、id_rsa.pub 和known_hosts 这三个文件。
其中,
id_rsa:私钥文件
id_rsa.pub:公钥文件
know_hosts:已知主机的公钥文件

2.复制公钥至服务器
命令:

scp -p ~/.ssh/id_rsa.pub root@<server ip>:/root/.ssh/authorized_keys

之后会要求输入远程服务器的登陆密码,输入密码后回车即可。

当然,也可以登录服务器后用 vim 编辑器打开 .ssh/ 目录下的 authorized_keys 文件,将本地 id_rsa.pub 文件中的内容复制进去,之后保存退出即可。若有多个公钥,则在 authorized_keys 文件中换行后继续输入公钥文件中的内容即可。

3.登录服务器
命令:

ssh root@<server ip>

回车后会要求输入 本地私钥的解密密码(即第一步中设置的“password”),解密私钥后就可以登录服务器了。

注1:上文路径中出现的“yourname”是指你登陆客户机时使用的用户名。

注2:在部署公钥的时候虽然使用了服务器相应登陆账户(如root账户)的密码,但是之前所生成的公钥与私钥和这个密码并没有联系,输入该密码仅仅是为了登陆远程服务器,将公钥文件部署到服务器上。

更新记录

2022 年 10 月 26 日第 02 次更新
2020 年 02 月 26 日第 01 次更新