远程连接本地虚拟机失败问题汇总

前言

因为我的 Ubuntu 虚拟机是新装的,并且应该装的是比较纯净的版本(纯净是指很多工具都尚未安装),然后在使用远程连接工具 XShell 连接时出现了很多问题,这些都是我之前没遇到过的(因为之前主要使用云服务器),因此记录一下,这样以后遇到类似的情况会少走很多坑。

远程连接失败

情况如下:

在这里插入图片描述

从结果上不难看出,我们能够连到我们的虚拟机 ip(尝试 ping 也是没有问题),但是连接失败了。

这是因为我们的虚拟机尚未安装 openssh-server(Ubuntu 操作系统版本,如果你使用的是 CentOS 或者是其它的版本,请自行搜索嗷)。

我们使用下面的命令进行安装:

sudo apt-get install openssh-server

安装完成以后,我们就可以连通了,但是又会出现下面的问题。

明明密码正确,但是无法登录上去

我反复确认了自己的密码,但是怎么都登不上去,情况如下:

在这里插入图片描述

查了资料之后发现,因为我是本地虚拟机学习使用的,并不关心安全性,因此我只使用了一个用户登录,也就是 root 用户,root 用户如果要远程登录的话,那么就需要做一件事情,修改配置项:

vim /etc/ssh/sshd_config

在这里面检查 /etc/ssh/sshd_config 文件中的 PermitRootLogin 指令。如果设置为 noprohibit-password,则你将无法使用密码以 root 用户身份登录。你可以将其更改为 yes(允许密码登录),但出于安全考虑,通常不建议这样做。但我这里只是为了学习使用,因此我就改为 yes 了。

同样的操作还有一个字段:PasswordAuthentication ,也要将其修改为 yes 嗷。

修改后的样子如下:

PasswordAuthentication yes
PermitRootLogin yes

最后重启一下 ssh 服务:

sudo systemctl restart sshd

理论上就可以了,但是我又踩了坑,因为我的 root 用户名是 TheSea,但 Ubuntu 系统只认小写,所以我登录的用户名就应该是 thesea 。

用户名输入错了又让我反复试了好久…

如果不确定自己的用户名是什么,那么可以用下面的命令试一下:

在这里插入图片描述

因此我的登录名是 thesea,此时就可以正确连接上了:

在这里插入图片描述

番外:可能会遇到的玄学解决法

如果上面的操作都执行了但是还是没有解决,那么就重启 VMware,重启一下 Ubuntu 虚拟机,重启一下 XShell ,众所周知,重启能解决百分之八十的问题。

这一通下来应该就没有问题了,亲测有效。

连接失败的另一种可能:无法解析主机名

这种问题的主要形式就是 ping 不通网,本身远程连接也是一种网络服务,因此如果没有网的话肯定也是联不通的。

比如这种情况,当我们输入下面的命令:

ping www.baidu.com

虚拟机直接显示:暂时无法解析该主机名

当然这种问题对应的情况有很多种,对于我的这种是这样的情况:在出现这个问题之前我输入 ifconfig 命令时,虚拟机提供的 ip 地址如下:

在这里插入图片描述

但在出现了无法解析主机名这个问题之后,我检查 ifconfig,发现就只剩一个本地环回地址了:

在这里插入图片描述

这说明缺少一个网络适配器,因为 ifconfig 命令的作用就是查看或者网络接口用的,ifconfig 命令的作用如下:

在这里插入图片描述
在这里插入图片描述

我这里只有一个机器自身的环回网络地址接口,那肯定是有问题的,于是我使用 ip a 命令查看了我虚拟机上的所有网络适配器接口:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:0c:29:db:90:41 brd ff:ff:ff:ff:ff:ff
    altname enp2s1

可以看到实际上我是有另一个网络适配器的,也就是上面的 ens33,我之前就是通过这个 ens33 和外部网络进行通信的,但是从上面的输出可以看到,其状态 state 是 down 的状态,也就是没有开启的状态,所以我们的 ifconfig 没有检测到它,因此我们按如下的步骤将其重新启动起来即可:

1、启用网络接口: 可以使用以下命令启用 ens33 接口:

sudo ip link set ens33 up

2、获取 IP 地址: 启用后,你可能需要获取 IP 地址。如果你使用的是 DHCP(动态主机配置协议),可以使用以下命令:

sudo dhclient ens33

3、检查网络连接: 完成上述步骤后,使用 ip a 命令再次检查 ens33 的状态,确保它的状态变为 UP 并且获取到了有效的 IP 地址。

4、虚拟机管理器设置: 如果仍然无法连接,确保在你的虚拟机管理器(如 VirtualBox 或 VMware)中,网络适配器已设置为连接到 NAT 或桥接模式。

经过上述步骤以后,再输入 ifconfig 可以发现已经使用上了之前未激活的 ens33 网络适配器接口:

在这里插入图片描述

问题解决。