Windows SSH 远程控制 - frp 内网穿透教程

适用场景:两台 Windows 电脑,你没有公网 IP,但有一台公网 Linux 服务器。
通过 frp 建立 SSH 隧道,实现纯命令行远程控制。


整体架构

你的 Windows 电脑  -->  公网服务器:6000  -->  对方 Windows:22 (frp隧道)

环境说明

角色系统条件
你(控制端)Windows有 SSH 客户端(PowerShell 自带)
对方(被控端)Windows无公网 IP
中转站Linux 公网服务器有公网 IP,端口 6000 可用

第一步:公网服务器部署 frps(frp server)

登录你的公网 Linux 服务器:

# 1. 下载 frp
wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
tar -xzf frp_0.61.1_linux_amd64.tar.gz
cd frp_0.61.1_linux_amd64

# 2. 创建配置文件 frps.toml
cat > frps.toml << 'EOF'
bindPort = 6000
auth.method = "token"
auth.token = "你的连接密码"

# 允许客户端映射的远程端口范围
allowPorts = [{ start = 6001, end = 6010 }]
EOF

# 3. 启动 frps(后台运行)
nohup ./frps -c frps.toml > frps.log 2>&1 &

提示:记下 auth.token 的值,后面客户端配置要一致。


第二步:对方 Windows 安装 OpenSSH Server

在对方 Windows 上,以管理员身份打开 PowerShell:

# 1. 安装 OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# 2. 启动 SSH 服务
Start-Service sshd

# 3. 设置开机自启
Set-Service -Name sshd -StartupType Automatic

# 4. 确认端口 22 在监听(看到 0.0.0.0:22 就对了)
Get-NetTCPConnection -LocalPort 22

创建 SSH 账号(对方需要有账号让你登录):

# 查看现有账号
Get-LocalUser

# 如果对方没有账号,创建一个(可选)
# New-LocalUser -Name "你的用户名" -Password (ConvertTo-SecureString "你的密码" -AsPlainText -Force)

注意:确认对方 Windows 防火墙允许 22 端口入站。控制面板 → Windows Defender 防火墙 → 高级设置 → 入站规则 → 新建规则 → 端口 22 允许。


第三步:对方 Windows 部署 frpc(frp client)

3.1 下载 frp

在对方电脑上访问:
https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_windows_amd64.zip

解压到 C:\frp\

3.2 创建 frpc.toml

C:\frp\ 下新建 frpc.toml,内容如下:

serverAddr = "你的公网服务器IP"
serverPort = 6000
auth.method = "token"
auth.token = "你的连接密码(与 frps.toml 一致)"

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6001

3.3 下载运行

打开 CMD(管理员),运行:

cd C:\frp
frpc.exe -c frpc.toml

看到类似输出说明连接成功:

login to server success, frpc proxy started

3.4 设置 frpc 开机自启(注册 Windows 服务)

让对方电脑重启后 frp 隧道自动重建,创建一个批处理文件 C:\frp\frpc.bat

@echo off
cd /d C:\frp
frpc.exe -c frpc.toml

然后创建计划任务:

# 管理员 PowerShell 中运行
$action = New-ScheduledTaskAction -Execute "C:\frp\frpc.bat" -WorkingDirectory "C:\frp"
$trigger = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -TaskName "frpc" -Action $action -Trigger $trigger -RunLevel Highest

第四步:你连接对方 Windows

在你自己的 Windows 上,打开 PowerShell:

ssh -p 6001 对方Windows用户名@公网服务器IP

示例

ssh -p 6001 administrator@1.2.3.4

输入对方 Windows 的密码,即可远程控制。


完整命令速查

公网服务器(frps)

# 启动
./frps -c frps.toml

# 查看日志
tail -f frps.log

# 停止
pkill frps

对方电脑(frpc)

# 启动
cd C:\frp && frpc.exe -c frpc.toml

# 查看日志(frpc.toml 中可配置 console 或 verbose)

你连接

ssh -p 6001 username@服务器IP

常见问题

Q1:连接拒绝 (Connection refused)

  • 检查对方 Windows 22 端口是否在监听:netstat -an | findstr :22
  • 检查对方防火墙是否放行了 22 端口
  • 检查 frpc 是否成功连接 frps(看日志)

Q2:frpc 连接不上 frps

  • 确认服务器 6000 端口已开放(telnet 服务器IP 6000 测试)
  • 确认 serverAddrserverPort 配置正确
  • 确认 auth.token 与 frps.toml 一致

Q3:连接成功但密码错误

  • 确认使用的是对方 Windows 的本机账号密码,不是微软账号
  • 如果密码有特殊字符,用引号包裹

Q4:frpc 断线后重连

  • 上面已配置计划任务开机自启
  • 手动重启:Start-ScheduledTask -TaskName "frpc"

Q5:想控制多台 Windows 电脑

在 frps.toml 的 allowPorts 中扩展端口范围,比如 6001-6100,然后在每台 Windows 的 frpc.toml 中分配不同的 remotePort(如 6002、6003……)。


安全建议

  1. auth.token 用强密码,不要用简单字符串
  2. SSH 密码至少 8 位,含大小写字母和数字
  3. frps 日志定期清理> frps.log
  4. 不要把 frpc 配置发给别人,谁拿到都能尝试连接

附:frp 下载地址汇总

组件下载
frps (Linux)https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
frpc (Windows)https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_windows_amd64.zip

当前版本 0.61.1(2024 年),如有新版请自行替换版本号。