如何远程SSH到Windows内部的虚拟机?

1. 背景

我学校有一台Windows电脑 (x@a.b.c.d),里面安装了一个Ubuntu虚拟机(用户名为y),虚拟机里连着VPN。并且虚拟机的22端口映射到了主机的22端口。通过这个VPN我可以访问另一个远程的服务器(z@e.f.g.h)用于炼丹。

我现在在家,无法直接访问远程服务器,只能把学校电脑作为跳板才可以。下面是示意图

image

2. 在Windows上安装OpenSSH并配置服务器

2.1 安装SSH Server

假如你在机器A上安装SSH,一般情况下只有客户端,也就是说你只能去ssh到其它远端机器。但是你如果想在机器B上ssh到机器A是不行的,因为机器A并没有SSH服务器(Server)。SSH Server安装方式如下

image

2.2 SSH Server配置

  1. 打开SSH Server

首先按下快捷键 Win + R,然后输入services.msc,之后会进入到windows的服务管理界面。往下滑你可以找到OpenSSH SSH Server选项,双击它后点击启动,并将启动类型选项改为自动

image

  1. 防火墙增加入站规则,添加22端口

image

你可以通过如下命令查看22端口是否成功监听

netstat -an | findstr :22

image

  1. 修改sshd_config文件
    sshd_config路径一般在C:\ProgramData\ssh文件夹里,其中ProgramData是隐藏文件夹,你需要在文件管理器里设置显示隐藏文件夹后就能看到了。之后用管理员权限打开sshd_config文件,你需要修改两个地方:
  • 一个是把原本是注释状态的端口取消,即把#删掉即可
Port 22
  • 另一个则是把最后两行注释掉,如下。这个耽误了我最长时间,之间一直无法成功ssh,直到把这个做了之后就可以了。
#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

如果你修改了上面提到的路径的sshd_config还是没用,你也可以试着把C:\Windows\System32\OpenSSH路径下的sshd_config_default仿照上面的方法修改一下。

开始SSH

假设你远程Windows的用户名是x,IP是a.b.c.d;虚拟机的用户名是y,并且你已经将虚拟机的22端口映射到了Windows的22端口,那么你可以直接通过如下方式就可以ssh到虚拟机了

ssh -J x@a.b.c.d,y@127.0.0.1 z@e.f.g.h

参考

posted @ 2023-02-19 00:38  marsggbo  阅读(472)  评论(0编辑  收藏  举报