前言
因为我的 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
指令。如果设置为 no
或 prohibit-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 网络适配器接口:
问题解决。