我在 Windows 10(主机)上使用 VirtualBox 创建了两个虚拟机(Guest DT
和Guest S
)。我可以通过 SSH 连接Guest DT
到Guest S
吗?
Guest DT
是 Ubuntu桌面18.04。Guest S
正在运行 Ubuntu服务器18.04。- VirtualBox 术语
我对 SSH 不熟悉。我已在 Google 上搜索并阅读了此网站上“类似问题”的答案。
错误
在Guest DT
,我这样做:
$ ssh [email protected]
ssh: connect to host 10.0.2.15 port 22: Connection refused
笔记:
- 我可以成功 ping 10.0.2.15
test
是我的用户名Guest S
。
环境设置
在Guest DT
:
$ ssh-keygen
$ cat ~/.ssh/id_rsa.pub
ssh-rsa <a very long key> neil@neil-VirtualBox
在Guest S
:
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ touch ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
$ echo "ssh-rsa <a very long key> neil@neil-VirtualBox" > ~/.ssh/authorized_keys
$ /etc/init.d/ssh restart
在Guest S
:
test@server01:~$ service sshd status
ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2018-06-15 02:05:04 UTC; 1h 16min ago
Process: 903 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 906 (sshd)
Tasks: 1 (limit: 2317)
CGroup: /system.slice/ssh.service
└─906 /usr/sbin/sshd -D
Jun 15 02:05:04 server01 systemd[1]: Starting OpenBSD Secure Shell server...
Jun 15 02:05:04 server01 sshd[906]: Server listening on 0.0.0.0 port 22.
Jun 15 02:05:04 server01 sshd[906]: Server listening on :: port 22.
Jun 15 02:05:04 server01 systemd[1]: Started OpenBSD Secure Shell server.
$ sudo ufw status
[sudo] password for test:
Status: inactive
/etc/ssh/sshd_config contains :
#PubkeyAuthentication yes
答案1
我认为 VirtualBox 客户机的默认网络设置NAT
并不是真正为了实现这种类型的网络通信;但根据旧帖子,可能可以通过转发非系统端口到来宾端口并使用默认环回 IP 地址到达访客。10.0.2.2 是默认环回。
设置网络
但是,最简单的方法是确保为每个客户机选择正确的网络。关闭客户机,然后在 VirtualBox 中编辑适合您需求的联网模式(注意网格)。
使用默认 NAT 网络
使用 NAT,VirtualBox 使用特殊 IP 10.0.2.2 作为环回(至少我认为这仍然是正确的)。因此从环回转发的端口可供所有客户机使用。我认为你应该能够利用这一点。要使用 NAT 网络进行通信,需要以下之一:
使用 VBoxManage 设置 NAT 转发非系统端口(1024–65535)降低系统端口 (< 1024)。
- 在这种情况下,将端口 2222 之类的内容转发到端口 22(SSH 的默认端口)。根据问题, 这还假设我们将使用 的
Guest S
IP 地址。10.0.2.15
在 Virtualbox Host 上配置端口转发,运行:
VBoxManage modifiedvm "虚拟机名称" --natpf1 "guestssh,tcp,,2222,,22"
所有到达任何主机接口的 2222 端口的 TCP 流量都将转发到客户机的 22 端口。协议名称 tcp 是强制属性,定义应使用哪种协议进行转发(也可以使用 udp)。名称 guestssh 纯粹是描述性的,如果省略,将自动生成。--natpf 后面的数字表示网卡,与 VBoxManage 的其他部分一样。
检查添加的规则:
VBoxManage showvminfo myserver | grep'规则'
Guest Server
通过主机环回映射和端口转发连接到Guest S
neil@neil-VirtualBox$ ssh -p 2222[电子邮件保护]
- 在这种情况下,将端口 2222 之类的内容转发到端口 22(SSH 的默认端口)。根据问题, 这还假设我们将使用 的
替代方案:更改 (客人 S)/etc/sshd_config聆听 非系统端口(> 1024).然后重新加载 ssh。
答案2
只需删除已知主机目录中包含的所有 ECDSA 指纹密钥(可能是 SHA256)。
- 跑步
vi ~/.ssh/known_hosts
- 删除known_hosts文件中与主题IP地址相关的所有密钥。
- 输入“Esc”键,然后输入“Shift”键 + “:” + “x”