V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
amiwrong123
V2EX  ›  程序员

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

  •  
  •   amiwrong123 · 214 天前 · 1168 次点击
    这是一个创建于 214 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    • 网段为 192.168.135.XXX (掩码 255.255.255.0 )
    • 网关为 192.168.135.2

    在 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 的坑感觉比较多。不过有大佬知道的,也可以指导一下。

    9 条回复    2023-09-27 10:18:16 +08:00
    yyzh
        1
    yyzh  
       214 天前 via Android
    这么麻烦的么。。。我一直都是用的网关地址(vm 那个)
    cnbatch
        2
    cnbatch  
       214 天前
    其实不需要手动创建入站规则,安装 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
        3
    amiwrong123  
    OP
       214 天前
    @yyzh #1
    你说这个网关 192.168.135.2 吗
    虚拟机里,ping 这个地址是可以的,但 ssh 过去,会提示 port 22: Connection refused 的
    yyzh
        4
    yyzh  
       214 天前 via Android
    @amiwrong123 试试把防火墙关了?或者 ssh 监听没设置对?
    amiwrong123
        5
    amiwrong123  
    OP
       214 天前
    @cnbatch #2
    本来我也没有创建入站规则的,但是在虚拟机里 ssh 192.168.0.103 时,之前会出现 Connection refused ,然后我就加了入站规则。
    ![]( https://s3.bmp.ovh/imgs/2023/09/26/4ddbff3a322f68c2.png)

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

    然后可能还要检查下 sshd_config:
    位置应该在 C:\ProgramData\ssh\sshd_config
    看看 PasswordAuthentication 、PermitRootLogin 之类的,该改成 yes 的都改一改
    LeeLou
        7
    LeeLou  
       213 天前
    192.168.135.1 应该是宿主机 win 的 vmnet8 网卡,本地连接里是不是把它禁用了?
    bruce0
        8
    bruce0  
       213 天前
    我原来也遇到过这个问题, 没找到解决办法, 最后改用桥接了, 方便
    skiy
        9
    skiy  
       213 天前 via iPhone
    用网关地址。docker network inspect mynetwork | grep IPv4Address

    好吧,windows 我没试验过…
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   888 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 21:01 · PVG 05:01 · LAX 14:01 · JFK 17:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.