NAT 虚拟机里面,想要 ssh 到宿主机,应该是 ssh 这个 ip 吗

2023-09-26 22:46:47 +08:00
 amiwrong123

虚拟机软件:VMware Workstation Pro 12 虚拟机:Ubuntu16 LTC 宿主机:win10

目前宿主机能够 ssh 到虚拟机里面去。(没有设置什么端口映射,因为是我自己笔记本创建的虚拟机)

在 VMware 那边查看 NAT 子网信息:

在 Ubuntu 里面查看 ip 为:192.168.135.128

现在我合计试一下 虚拟机 ssh 到宿主机试一下。以下我的宿主机的信息:

然后,我发现 192.168.135.1 这个 ip 我根本 ping 不通,然后 ping 192.168.0.103 是可以的(以太网适配器的地址)。

后面又遇到一些问题,也这样解决了:通过给 Windows 添加 入站规则(允许 22 端口进入),安装可选功能——openSSH 服务器,并开始服务器。

现在有两个问题:

  1. 我在虚拟机里想 ssh 宿主机,就应该 ssh 到 192.168.0.103 (以太网适配器的地址)吗?为什么?
  2. 我在虚拟机里 ssh 宿主机的 192.168.0.103 ,目前总是提示 Permission denied, please try again ,但我的用户名和密码应该没有问题。然后我直接在 win10 里,ssh localhost 发现也是提示 Permission denied, please try again 。

a. 这说明提示权限不足和虚拟机没有关系,只有当我在 win10 里 ssh localhost 都可以成功的情况下,虚拟机 ssh 宿主机才可能成功。主要想问 这个思路应该是对的吧?

b. PS:不过也不想折腾了,Windows 的坑感觉比较多。不过有大佬知道的,也可以指导一下。

1384 次点击
所在节点    程序员
9 条回复
yyzh
2023-09-26 23:32:42 +08:00
这么麻烦的么。。。我一直都是用的网关地址(vm 那个)
cnbatch
2023-09-26 23:34:06 +08:00
其实不需要手动创建入站规则,安装 OpenSSH 可选功能的时候,Windows 会自动创建对应规则的:
https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse
https://learn.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_install_firstuse

不过,我不确定是不是因为手动创建了规则会导致 Windows 不再自动创建规则,于是就无法 ssh 到 192.168.135.1
既然连接不上 192.168.135.1 ,那么连接 192.168.0.103 也没关系,反正 NAT 已经帮你转换好地址了

Permission denied 的问题,可能需要检查下注册表 HKLM:\SOFTWARE\OpenSSH 里面的 DefaultShell 指向了哪里,有可能指向了不存在的命令行解析器。根据其他人在 3 年前的描述:
https://learn.microsoft.com/en-us/answers/questions/109609/unable-to-access-the-win10-pc-with-openssh-install
可能是指向了 C:\Program Files\PowerShell\7\pwsh.exe
如果刚好你没安装 PowerShell 7 或者安装的 PowerShell 7 是 Windows 商店版本的,那可能会因为文件不存在而导致启动失败。

如果路径确实就是 C:\Program Files\PowerShell\7\pwsh.exe 并且没安装 PowerShell 7 ,那么从微软的 Github 页面下载安装就可以了:
https://github.com/PowerShell/PowerShell/releases/
务必安装 msi 版本的,64 位 Windows 不要选择 32 位版本的 PowerShell ,因为那样会安装到 Program Files (x86)

或者手动改成 cmd.exe 的路径也可以,如果习惯用 cmd 的话
amiwrong123
2023-09-26 23:42:46 +08:00
@yyzh #1
你说这个网关 192.168.135.2 吗
虚拟机里,ping 这个地址是可以的,但 ssh 过去,会提示 port 22: Connection refused 的
yyzh
2023-09-26 23:46:26 +08:00
@amiwrong123 试试把防火墙关了?或者 ssh 监听没设置对?
amiwrong123
2023-09-26 23:51:08 +08:00
@cnbatch #2
本来我也没有创建入站规则的,但是在虚拟机里 ssh 192.168.0.103 时,之前会出现 Connection refused ,然后我就加了入站规则。
![]( https://s3.bmp.ovh/imgs/2023/09/26/4ddbff3a322f68c2.png)

你说的这个注册表这个,我也搞了下(按照 Google 的文章),而且这个路径我设置的,确实是 powershell 的路径呀,感觉没有问题。
cnbatch
2023-09-27 00:08:23 +08:00
端口 22 拒绝连接那个,可以按楼上说的把整个防火墙关掉试试,可能只是规则问题

然后可能还要检查下 sshd_config:
位置应该在 C:\ProgramData\ssh\sshd_config
看看 PasswordAuthentication 、PermitRootLogin 之类的,该改成 yes 的都改一改
LeeLou
2023-09-27 07:15:29 +08:00
192.168.135.1 应该是宿主机 win 的 vmnet8 网卡,本地连接里是不是把它禁用了?
bruce0
2023-09-27 08:47:57 +08:00
我原来也遇到过这个问题, 没找到解决办法, 最后改用桥接了, 方便
skiy
2023-09-27 10:18:16 +08:00
用网关地址。docker network inspect mynetwork | grep IPv4Address

好吧,windows 我没试验过…

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/977399

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX