在内网 Windows 主机通过 Cygwin 和 AutoSSH 开启端口转发

上文 SSH端口转发:实现反向SSH隧道内网穿透 讲到如何通过 autossh 将内网的主机端口拉到外网来访问以穿透各种检查。

现在同样的问题摆在我们面前,我们现在有一个需要通过复杂的 VPN 连接才能接上,然后通过远程桌面访问的 windows 机器。

我们可以用同样的手段建立网络,通过 SSH 的端口转发功能访问 3389,80 等各种端口。

不过这次是在 Windows 上面,实现的手段有所不同。

计划的最终目标

与上文一样,我们下面这几台服务器:

  • A机:开放了 3389 远程桌面端口的 Windows Server 2008 主机
  • B机:一台 Linux 服务器,具有公网 IP
  • C机:我们平常的桌面 PC,可能是 Windows 或者 Linux

至于C机到B机的客户端转发设置和上文一样,这里就无需再讲,这里关键在于从A机到B机的服务端转发有所不同。

搞到最后,我们希望A机自动重启,C机自动重启之后,从C机执行远程桌面(Linux可以用rdesktop)能够通过127.0.0.1:????的端口访问到A机的3389端口。

需要解决的问题

最大的问题在于,我们在 Windows 下面怎么执行 autossh?又怎样令设定的 autossh 命令自动运行?

这些问题,我们通过 Cygwin 就可以解决,最终我们可以在 Cygwin 下面运行 linux 的命令,还可以将某个命令生成为 Windows 服务。

那么下面一步一步解释怎么说。

安装 Cygwin 以及 openssh,autossh 等命令集

Cygwin 就是一个可以在 windows 上面提供 bash 运行环境,并且能够安装常用 Linux 库的运行环境。

进官网 https://www.cygwin.com/ 安装,进入傻瓜模式下一步下一步。

注意,在选择安装包的这一步,记得勾选 openssh 以及 autossh 这两个包。

然后,我们会多了一个“Cygwin Terminal”的快捷方式,用这个就可以进入 bash。

手工执行 ssh 命令以及建立免密码登录

我们在 bash 里面先玩一下 ssh 命令登录一下远程机,搞好之后顺道按照以前的方式,创建一下登录密钥:

cd ~
mkdir -p .ssh
chmod 700 .ssh
cd .ssh
ssh-keygen -t rsa -f id_rsa -N ''

然后将 id_rsa.pub 的公钥加到B机的 authorized_keys 中。

这下应该可以免密码 ssh 得进去。

ssh username@server_b_ip

直接创建 autossh 的服务

在 bash 里面执行:

cygrunsrv -I AutoSSH_3389 -p /usr/bin/autossh -a "-M0 -NR 13389:127.0.0.1:3389 username@server_b_ip" -e AUTOSSH_NTSERVICE=yes

这样一步,如无意外已经在服务那里创建了一个自动启动的服务《AutoSSH_3389》,映射到B机上面的13389端口。

【重要】设置服务的执行用户

完了之后我们启动服务试试。

这里出现过这样一个错误:

A机 上的 AutoSSH 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。

经过长时间的调试,发现原因是登录验证环节失败,因为我刚才安装 id_rsa 的用户是 username,也就是 cygwin 的命令行界面对应的 home 目录是 /home/username,对应 ssh 过去的时候要使用 /home/username/.ssh/id_rsa 这个私钥才能自动登录。

但是这个服务安装的时候,没有指定是 username 这个用户去执行,导致 id_rsa 公钥找不到,从而登录失败,进程的程序运行结束,就会出现这个提示。

拗口,一句讲完,我们要指定执行服务的用户。

右键点击我们的服务,然后属性,选择“登录”这个 Tab,在“此账户”设定我们的运行账户为 username。

这次就应该可以启动了。

结果验证

成功之后,在 b 机查看端口,应该能够看到 13389 端口的连接,即为成功:

netstat -plant | grep 13389

参考:https://my.oschina.net/ankh2008/blog/308516


【转载请附】愿以此功德,回向 >>

原文链接:https://www.huangwenchao.com.cn/2016/10/windows-ssh-socks.html【在内网 Windows 主机通过 Cygwin 和 AutoSSH 开启端口转发】

发表评论

电子邮件地址不会被公开。 必填项已用*标注