我正在尝试连接到我的虚拟机但不断收到以下错误:
ssh: connect to host 192.168.56.101 port 22: Connection refused
我的主机操作系统是全新安装的 Ubuntu 18.04,虚拟机是旧的 Ubuntu 14.04(虚拟机不是全新安装的;相反,我创建了一个新的虚拟机,然后.dvi
从我的旧笔记本电脑导入虚拟硬盘文件,在旧笔记本电脑中ssh
运行没有任何问题)。
我可以ping
无包裹丢失地到达机器,并且我认为一切都配置正确。
在虚拟机上,我有两个适配器,一个是默认的 NAT,没有任何端口转发规则,另一个是通常的vboxnet0
仅主机适配器。这种vboxnet0
仅主机适配器是通过转到File -> Host Network Manager
并添加新条目创建的。DHCP 服务器已禁用,IP 地址/掩码为 192.168.56.101/24:
ifconfig
我的虚拟机的输出是:
这就是它的内容/etc/network/interfaces
:
ifconfig
我的主机的输出是:
enp61s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 00:d8:61:06:78:ce txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 2430 bytes 204819 (204.8 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2430 bytes 204819 (204.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vboxnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.56.101 netmask 255.255.255.0 broadcast 192.168.56.255
inet6 fe80::800:27ff:fe00:0 prefixlen 64 scopeid 0x20<link>
ether 0a:00:27:00:00:00 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 225 bytes 35362 (35.3 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlo1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.181.127.144 netmask 255.255.0.0 broadcast 10.181.255.255
inet6 fe80::e7bf:1f7f:8578:e980 prefixlen 64 scopeid 0x20<link>
ether 98:3b:8f:d8:06:17 txqueuelen 1000 (Ethernet)
RX packets 90490 bytes 44130738 (44.1 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 15323 bytes 2985782 (2.9 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
并且它etc/network/interfaces
是默认的:
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
在虚拟机中,ssh
服务器处于start/running
状态并且ufw
没有阻止22端口:
但是,从我的主机上看:
$ ssh -vvv 192.168.56.101
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: resolving "192.168.56.101" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to 192.168.56.101 [192.168.56.101] port 22.
debug1: connect to address 192.168.56.101 port 22: Connection refused
ssh: connect to host 192.168.56.101 port 22: Connection refused
笔记:向 NAT 适配器添加端口转发规则,除非我做错了,否则并不能解决问题;此外,在我的旧笔记本电脑中我没有端口转发规则。
答案1
是的,正如@Kenster 在评论中所说,主机和客户机在vboxnet0
网络内分配了相同的 IP。我刚刚删除了vboxnet0
接口,然后使用默认选项重新创建并启用了 DHCP 服务器。虚拟机已经配置了静态 IP,/etc/network/interfaces
因此我不需要进一步限制vboxnet0
。
这样,启用 DHCP 后,主机将获得与网络内的客户机(静态 .101)不同的 IP(.1)vboxnet0
。
发生错误connection refused
的原因是,由于服务器 IP 与本地 IP 匹配,客户端试图连接到本地主机而不是虚拟机,因此,由于我没有安装任何 ssh 服务器,所以没有人监听端口 22。