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

项目场景

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

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

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

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

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

在这里插入图片描述

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

二、配置

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

content

1. win端

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

content

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

[common]
server_addr = 自己的服务器公网IP
server_port = 7000

# 下面这个可以创建多个,做多个端口映射。
# 其中local_port就是本地需要映射的端口
# remote_port就是云服务器的端口
# 也就是说,连接的时候,我们只需要连接云服务器的6000端口,就相当于链接办公室服务器的22端口
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
content

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

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

2. windows开启openssh

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

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

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

输出应该是类似的结果:

Name  : OpenSSH.Client~~~~0.0.1.0
State : NotPresent
Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

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

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

输出结果类似:

Path          :
Online        : True
RestartNeeded : False

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

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

首先需要开启 SSHD 服务:

Start-Service sshd

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

Set-Service -Name sshd -StartupType 'Automatic'

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

Get-NetFirewallRule -Name *ssh*

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

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

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

3. 服务端(linux端)

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

frps.ini

[common]
bind_port = 7000

# 下面的内容可要可不要,没什么大用,不用的话配置文件都不需要改,直接上传
dashboard_port = 7500
# dashboard 用户名密码,默认都为 admin
dashboard_user = admin
dashboard_pwd = admin

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

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

三、运行

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

1. linux端

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

./frps -c frps.ini

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

chmod 777 frpc

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

2. win端

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

运行如下命令

frpc -c frpc.ini

content

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

3. 测试

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

ssh -p 6000 你要连接的win的用户名@你的服务器公网IP

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

四、配置自启动

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

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

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

1. linux

先进入下面的文件夹

cd /lib/systemd/system

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

vim frps.service

文件中我们写下面的内容

[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=你的用户名
Restart=on-failure
RestartSec=5s
ExecStart=/root/frp/frps -c /root/frp/frps.ini  "这里写你的绝对路径的手动启动frc的命令"
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target

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

然后分别执行下面的命令

systemctl daemon-reload //重新加载
systemctl enable frps	//frps自启动
systemctl start frps	//开启frps服务
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

content

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

content

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

<service>
	<!-- 该服务的唯一标识 -->
    <id>frpc</id>
    <!-- 该服务的名称 -->
    <name>frpc_0.43.0-windows-amd64</name>
    <!-- 该服务的描述 -->
    <description>frp内网穿透-客户端</description>
    <!-- 要运行的程序路径 -->
    <executable>D:\frp_0.43.0\frpc.exe</executable>
    <!-- 携带的参数 -->
    <arguments>-c D:\frp_0.43.0\frpc.ini</arguments>
    <!-- 第一次启动失败 60秒重启 -->
    <onfailure action="restart" delay="60 sec"/>
    <!-- 第二次启动失败 120秒后重启 -->
    <onfailure action="restart" delay="120 sec"/>
    <!-- 日志模式 -->
    <logmode>append</logmode>
    <!-- 指定日志文件目录(相对于executable配置的路径) -->
    <logpath>logs</logpath>
</service>

2. 运行

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

.\winsw.exe install

会提示服务安装成功

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

找到刚才安装的服务

content

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

补充:winsw常用命令

//注册服务
.\winsw.exe install
//卸载服务
.\winsw.exe uninstall
//启动服务
.\winsw.exe start
//停止服务
.\winsw.exe stop
//重启服务
.\winsw.exe restart
//查看状态
.\winsw.exe status

五、免密登录

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

1.生成公钥和私钥

Windows 打开 cmd
输入:ssh-keygen

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端直接执行下面的命令

systemctl restart sshd

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

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

六、使用

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

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

命令就是这个

ssh -p 6000 你要连接的win的用户名@你的服务器公网IP

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

content
  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内网穿透,你可以使用工具如ngrok或frp来实现。这些工具可以将你的本地服务器暴露在公共网络上,使其可以通过互联网访问。以下是使用ngrok进行内网穿透的步骤: 1. 首先,你需要在你的本地机器上安装ngrok。你可以从ngrok的官方网站下载适用于你的操作系统的安装包。 2. 安装完成后,你需要创建一个ngrok账户。在ngrok的官方网站上注册并登录。 3. 接下来,在命令行中运行ngrok,并指定要转发的本地端口。例如,如果你的本地服务器在localhost的8080端口上运行,你可以使用以下命令:`ngrok http 8080` 4. ngrok会生成一个随机的公共URL,你可以通过这个URL访问你的本地服务器。 请注意,使用ngrok进行内网穿透可能会涉及到一些安全风险,因为你的本地服务器将直接暴露在公共网络上。因此,在使用之前,请确保你已经采取了适当的安全措施来保护你的服务器和数据。 对于VS Code远程连接Windows服务器,你可以使用VS Code的远程开发扩展。以下是一些基本步骤: 1. 在Windows服务器上安装并配置VS Code。 2. 在VS Code中安装“Remote - SSH”扩展。 3. 在VS Code的侧边栏中,点击“远程资源管理器”图标。 4. 在弹出的菜单中,选择“连接到主机...”。 5. 在弹出的输入框中,输入你的服务器的SSH连接信息,如用户名和IP地址。 6. 连接成功后,你将能够在VS Code中浏览和编辑服务器上的文件,并执行命令。 请确保你在Windows服务器上已经启用了SSH,并且你的网络连接稳定。此外,还要注意保护你的服务器和连接的安全性,如使用安全的SSH密钥进行认证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值