[Win服务器] 使用frp对windows服务器进行内网穿透并进行ssh连接

872 0
Honkers 2025-8-19 12:49:19 来自手机 | 显示全部楼层 |阅读模式

项目场景

我使用内网穿透的场景:家里一台windows的笔记本,办公室一台windows的服务器,但是由于这台windows服务器没有公网ip,所以一直是用向日葵或者todesk链接,跑代码什么的比较麻烦,所以用我的一个云服务器来搭建一个内网穿透服务。也是在网络上搜集流程来做,在这里做一下汇总记录。

要用frp进行内网穿透首先需要一个有公网IP的云服务器,相当于一个中转机器。

注意:下面的配置中
客户端都是指办公室的windows电脑,也就是你想要远程访问的电脑。
服务端都是指具有公网IP的云服务器
所有的配置都在这两台机器上,你其他要连接办公室服务器的电脑都无需进行额外配置。

一、下载frp客户端和服务端

首先去github上下载frp软件。点击这里进入下载 frp下载地址

如图下载对应文件,分别是win和linux端的,win端的需要这里需要客户端,给办公室的服务器用, linux端的给云服务器用,所以是要服务端。下面进行详细配置。

二、配置

我这里是有一个linux的云服务器作为服务端,windows作为客户端,所以这里我也是分别下载了这两个压缩包,下载好之后进行解压。

1. win端

首先是windows端,win端作为客户端,我们只保留这三个c结尾的文件,其他的可以删除

配置只需要把frpc.ini中的server_addr项,改为自己云服务器的公网IP地址就可以了,其他的不需要动,了解原理之后可以自己进行更改或者添加,我这里就是简单的先连通,但其实我的需求这个配置已经可以满足了。

  1. [common]
  2. server_addr = 自己的服务器公网IP
  3. server_port = 7000
  4. # 下面这个可以创建多个,做多个端口映射。
  5. # 其中local_port就是本地需要映射的端口
  6. # remote_port就是云服务器的端口
  7. # 也就是说,连接的时候,我们只需要连接云服务器的6000端口,就相当于链接办公室服务器的22端口
  8. [ssh]
  9. type = tcp
  10. local_ip = 127.0.0.1
  11. local_port = 22
  12. remote_port = 6000
复制代码

然后把win的文件放到你需要内网穿透的这台win上,随便找一个位置,建议别放C,有权限问题。

我放在了D盘下创建了一个叫做frp的文件夹,把上面的三个文件拷贝进去就可以了。

2. windows开启openssh

因为windows端,默认没有下载openssh服务端,所以我们这里要下载一下,这里有两种下载方式,一种是去设置中,找到添加可选方式,搜索openssh,找到openssh服务端,下载。下载好之后去计算机管理,服务,找到opensshservice这个服务,打开它,并在属性中设置自动启动就可以了。
这个网上有很多教程,下面给出一个直接用命令行下载的方法,这个比较快不用找,所以详细介绍这个方法。

首先需要用管理员身份启动 PowerShell,使用如下命令看一下,要确保 OpenSSH 可用于安装:

  1. Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
复制代码

输出应该是类似的结果:

  1. Name : OpenSSH.Client~~~~0.0.1.0
  2. State : NotPresent
  3. Name : OpenSSH.Server~~~~0.0.1.0
  4. State : NotPresent
复制代码

然后使用 PowerShell 安装服务器即可:

  1. Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
复制代码

输出结果类似:

  1. Path :
  2. Online : True
  3. RestartNeeded : False
复制代码

这样就可以完成 OpenSSH 的安装。

安装完成之后,就需要进行一些初始化配置了,还是以管理员身份,使用 PowerShell 执行即可。

首先需要开启 SSHD 服务:

  1. Start-Service sshd
复制代码

然后设置服务的自动启动:

  1. Set-Service -Name sshd -StartupType 'Automatic'
复制代码

最后确认一下防火墙是否是放开的:

  1. Get-NetFirewallRule -Name *ssh*
复制代码

如果是放开的,那么结果会提示 OpenSSH-Server-In-TCP这个状态是 enabled。

好了,完成如上操作之后我们就可以使用 SSH 来连接我们的 Windows 服务器了。

但是注意,这里只开启了openssh服务,我们只能在局域网中和这个电脑经行ssh链接

3. 服务端(linux端)

linux端也是只需要保留三个s结尾的文件作为服务端,配置如下,其实不需要更改,如果想要网页端的一个显示面板,可以加上下面的内容,也就是在浏览器访问服务器的7500端口,可以出来一个可视化的面板。

frps.ini

  1. [common]
  2. bind_port = 7000
  3. # 下面的内容可要可不要,没什么大用,不用的话配置文件都不需要改,直接上传
  4. dashboard_port = 7500
  5. # dashboard 用户名密码,默认都为 admin
  6. dashboard_user = admin
  7. dashboard_pwd = admin
复制代码

这里你一定要记得去云服务器管理页面,在防火墙中把6000,7000,7500这三个端口打开,如果你需要更多端口的映射,你就要记得把端口打开。

然后把我们配置好的linux端的三个文件都上传到服务器,我是放在了root目录下创建了一个frp的文件夹,这个位置无所谓,你能找得到就可以。

三、运行

接下来,我们分别把客户端和服务端手动运行起来,以便测试没有什么问题。

1. linux端

把文件上传好之后,在这个文件夹中,输入以下命令

  1. ./frps -c frps.ini
复制代码

如果提示权限不足,输入下面的命令把权限给他

  1. chmod 777 frpc
复制代码

然后再输入上面的命令跑起来,会提示你运行成功,linux端也就是服务端就运行好了

2. win端

这里我们先进入之前,创建的frp文件夹中,然后在这个文件夹下打开cmd

运行如下命令

  1. frpc -c frpc.ini
复制代码

跑起来之后就可以了,这个时候会看到linux服务端多了三条,就说明他们已经成功连起来了

3. 测试

然后可以用家里的电脑试一下,在powershell中输入

  1. ssh -p 6000 你要连接的win的用户名@你的服务器公网IP
复制代码

第一次链接会让你输入yes,然后输入密码,就连接成功了,到这里可以连接成功,已经算是是完成了,可以做很多事情了。

四、配置自启动

上一步我们是手动启动,关了窗口就没了,重启之后还要手动重新打开,比较麻烦。

所以我们配置一下自动启动,一劳永逸。

用样的分别在两个地方分别配置

1. linux

先进入下面的文件夹

  1. cd /lib/systemd/system
复制代码

在这个文件夹中我们创建并编辑文件frps.service

  1. vim frps.service
复制代码

文件中我们写下面的内容

  1. [Unit]
  2. Description=Frp Server Service
  3. After=network.target
  4. [Service]
  5. Type=simple
  6. User=你的用户名
  7. Restart=on-failure
  8. RestartSec=5s
  9. ExecStart=/root/frp/frps -c /root/frp/frps.ini "这里写你的绝对路径的手动启动frc的命令"
  10. LimitNOFILE=1048576
  11. [Install]
  12. WantedBy=multi-user.target
复制代码

需要改的位置就两个,User和ExecStart,user改成你的用户名,ExecStart改成你的手动启动命令,但是注意要用绝对路径,修改好之后我们:wq保存退出

然后分别执行下面的命令

  1. systemctl daemon-reload //重新加载
  2. systemctl enable frps //frps自启动
  3. systemctl start frps //开启frps服务
  4. systemctl status frps //查看frps开启状态
复制代码

在输入systemctl status frps后,可以看到输出内容说已启动就ok了

2. win端

这里配置的有两种方式,一个是bat快捷方式放在启动文件夹里,一个是做服务项

这里我们做做服务项,稍微复杂一点,但是很方便,而且没有黑窗口

使用WinSW实现service服务配置
WinSW(Windows Service Wrapper)是一个开源的 Windows 服务包装器,它可以将任何可执行文件(如 Java 应用程序、Python 脚本、Ruby 脚本等)转换为 Windows 服务,并为其提供了一些额外的功能,如重新启动、日志记录、配置文件管理等。

1. 下载WinSW安装包

github下载地址:WinSW

将下载的文件改名为winsw.exe,并在同级创建winsw.xml文件,都放在win端的frp文件夹中

下面配置winsw,我们编辑winsw.xml文件

  1. <service>
  2. <!-- 该服务的唯一标识 -->
  3. <id>frpc</id>
  4. <!-- 该服务的名称 -->
  5. <name>frpc_0.43.0-windows-amd64</name>
  6. <!-- 该服务的描述 -->
  7. <description>frp内网穿透-客户端</description>
  8. <!-- 要运行的程序路径 -->
  9. <executable>D:\frp_0.43.0\frpc.exe</executable>
  10. <!-- 携带的参数 -->
  11. <arguments>-c D:\frp_0.43.0\frpc.ini</arguments>
  12. <!-- 第一次启动失败 60秒重启 -->
  13. <onfailure action="restart" delay="60 sec"/>
  14. <!-- 第二次启动失败 120秒后重启 -->
  15. <onfailure action="restart" delay="120 sec"/>
  16. <!-- 日志模式 -->
  17. <logmode>append</logmode>
  18. <!-- 指定日志文件目录(相对于executable配置的路径) -->
  19. <logpath>logs</logpath>
  20. </service>
复制代码

2. 运行

配置好之后,我们安装服务,在当前文件中打开cmd,运行下面的命令

  1. .\winsw.exe install
复制代码

会提示服务安装成功

然后我们打开服务,Win键 + R,然后输入services.msc

找到刚才安装的服务

我们右键点击属性,把启动方式改成自动,然后再到这个页面右键启动它,就ok了,以后就不用管了,也不会出来黑窗口

补充:winsw常用命令

  1. //注册服务
  2. .\winsw.exe install
  3. //卸载服务
  4. .\winsw.exe uninstall
  5. //启动服务
  6. .\winsw.exe start
  7. //停止服务
  8. .\winsw.exe stop
  9. //重启服务
  10. .\winsw.exe restart
  11. //查看状态
  12. .\winsw.exe status
复制代码

五、免密登录

这个算是一个补充,之前的每次登录都会要求你输入密码,会比较麻烦,所以可以配置免密登录,这样每次登录直接就能连接,而不需要输入密码,步骤也很简单。

1.生成公钥和私钥

Windows 打开 cmd
输入:ssh-keygen

  1. ssh-keygen
复制代码

连续回车或者根据提示确定生成的私钥公钥存放的路径。默认(就是一路回车)会在C盘/用户/用户名/.ssh目录下生成公钥和私钥。
id_rsa:私钥
id_rsa.pub:公钥

2. 将公钥拷贝到服务器

  • 在服务器输入 ssh-keygen回车(生成服务器的公私钥)

  • 如果是windows端,就在cmd中输入ssh-keygen

  • 完成后会在用户目录下生成 .ssh目录(输入 ls -a查看)

  • 同样的windows端的话就是在C盘用户目录生成.ssh目录

  • 进入ssh目录 cd .ssh

  • 将客户端的公钥(也就是刚刚Windows上自己生成的id_rsa.pub)添加到 authorized_keys文件:

  • 可以vim authorized_keys直接将Windows上自己生成的id_rsa.pub的内容拷贝过去
    注意:如果没有 authorized_keys文件的话,用 touch authorized_keys创建一个,创建后权限改为 600

  • windows端的操作类似,也是在.ssh目录中,有一个authorized_keys文件,注意这里是没有后缀名的,如果没有就自己创建一个,然后把在客户端生成的公钥,也就是id_rsa.pub里面的内容,全部复制到authorized_keys中

  • 之后再继续增加免密登录的设备的话,就继续往authorized_keys文件中复制公钥就可以了。

4. 重启ssh服务

linux端直接执行下面的命令

  1. systemctl restart sshd
复制代码

window端就去计算机管理,找到里面的服务,然后找到之前安装的openssh服务端,右键重启他就可以了

然后链接时就可以不用输入密码了

六、使用

内网穿透之后,想做什么都可以。比如可以用vscode的remote ssh插件,直接链接到服务器,相当于直接在你配置了内网穿透的机器上跑代码,体验感非常好。

而需要注意的是,你在连接时,你要输入的ip都是你有公网ip的服务器的ip,而端口就是我们之前设置好的端口6000。

命令就是这个

  1. ssh -p 6000 你要连接的win的用户名@你的服务器公网IP
复制代码

如下图所示,下载这个插件之后,添加你的服务器进来,就可以本地写代码,服务器跑代码了。链接的时候,会让你输入一段ssh命令,就写上面的就可以了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行