答案1
因为你实际上什么都没说,所以我假设你在那个虚拟机中有一个相对原始的 Ubuntu 安装。
当您说您正在使用 VM 的“公共” IP 地址时,情况会稍微变得混乱,因为这可能意味着几件不同的事情。
但是,有一点值得注意:您最初的错误(当您尝试连接到端口 22 时出现“网络错误:连接被拒绝”)告诉您您能够访问虚拟机内部运行的系统,但该系统表示没有任何内容正在监听您访问的特定 IP 地址和端口组合。
我很确定工作站版 Ubuntu 安装默认不附带运行中的 SSH 服务器。但是服务器版本很可能会附带。
使用虚拟机控制台登录,并检查 SSH 服务器是否正在运行。我目前手边没有 Ubuntu 系统,但在终端中,这应该类似于
$ service sshd status
它可能被称为诸如ssh
、ssh-server
或openssh-server
类似的东西,而不是sshd
,但ssh
(类型ssh
tab) 上的制表符补全应该可以让你接近。你可能需要sudo
这个,例如sudo service sshd status
,但我认为常规用户访问应该足以获得服务状态(正在运行/停止)报告。
如果没有运行 SSH 服务器,甚至没有安装,那么这就解释了为什么您会收到“连接被拒绝”错误。使用以下命令安装 SSH 服务器:
$ sudo apt-get -u install openssh-server
验证要安装的软件包列表是否合理,然后确认。SSH 服务器将在安装过程结束时启动。
现在,查看 /etc/ssh/sshd_config。它将有零个或多个提供 IP 地址或端口号的Port
指令ListenAddress
(如果未指定,端口号默认为 22,如果您没有明确说明,服务器将监听所有 IP 地址)。这就是您需要连接的IP地址和端口。
如果未指定 IP 地址,ip addr show
将显示虚拟机内的网络接口及其各自的 IP 地址。这些是 SSH 服务器将监听的 IP 地址。
掌握了这些信息后,就可以执行任何必要的魔法咒语,让 PuTTY 连接到这个 IP 地址和端口组合。(例如,这可能涉及在 NAT 或防火墙中打洞或配置端口转发。)
一旦完成,您应该能够使用 PuTTY 连接并以 Ubuntu VM 上的非特权用户身份获得终端会话。从那里,sudo
根据需要提升您的权限,就像您坐在物理系统前一样。
我建议设置公钥认证,并且我非常推荐反对允许 root 直接登录。但是,如果你绝对必须允许 root 直接登录,然后编辑 /etc/ssh/sshd_config 并指定PermitRootLogin yes
,然后sudo passwd root
为 root 提供好的密码,然后重新启动 SSH 守护进程。再次,我不推荐这样做。
有了这些,连接端口 80 和 443 时出现了什么问题?端口 80 是 HTTP 的默认端口,端口 443 是 HTTPS 的默认端口。如果 Web 服务器正在运行,则很可能正在监听这两个端口,并且当您连接时,它将等待 HTTP 请求;对于端口 443,则需要经过 SSL 协商。当然可以手动发出 HTTP 请求,但这不是终端登录会话和 shell。一般来说,连接到随机端口(即使是众所周知的端口)不太可能获得您想要的结果。
答案2
在 Ubuntu 机器内,打开 /etc/ssh/sshd_config 并将 PermitRootLogin 更改为 yes。
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes