当前位置: 首页 > news >正文

用 ngrok + SSH 实现公网远程控制电脑

项目背景

当网络处于 NAT/不稳定的公网 IP 环境下,简单通过 SSH 连接内网主机是不可能的:

  • 无法缓解 NAT
  • 远程无法直接 ssh 自己网络内的主机
  • 公司或家庭网络常常封锁 22 端口

ngrok 利用「逆向 TCP 隔离网络通道」,实现了一个有效的「软公网」模型。内网主机主动连接 ngrok,且外网可通过接口 TCP 重应连接,达成一个安全连通。


架构设计图

[手机或远程控制终端]|ssh -p 12345 user@x.tcp.ngrok.io|
[ngrok 公网中继服务器]|Secure Tunnel (ngrokd)|
[你的 Mac / Windows SSH 服务]

1. 配置 SSH 服务器

macOS
sudo systemsetup -setremotelogin on

测试本地 SSH:

ssh youruser@localhost
Windows

打开 PowerShell (管理员):

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

测试本地 SSH:

ssh youruser@localhost

在这里插入图片描述

2. 配置 ngrok TCP 逆向通道

  1. 注册 ngrok: https://ngrok.com
  2. 下载 CLI: https://ngrok.com/download
  3. 配置 Token:
ngrok config add-authtoken <your-token>

启动 SSH TCP 选项:

ngrok tcp 22

输出:

tcp://4.tcp.ngrok.io:12345 → localhost:22

3. 远程连接命令结构

ssh youruser@4.tcp.ngrok.io -p 12345

建议配置 SSH config:

Host my-macHostName 4.tcp.ngrok.ioPort 12345User youruser

连接可简化为:

ssh my-mac

4. 跨平台遥控命令对比

功能macOS (终端)Windows (PowerShell / CMD)
锁屏pmset displaysleepnowrundll32.exe user32.dll,LockWorkStation
睡眠pmset sleepnowrundll32.exe powrprof.dll,SetSuspendState 0,1,0
关机sudo shutdown -h nowshutdown /s /f /t 0
重启sudo shutdown -r nowshutdown /r /f /t 0
登出osascript -e 'tell app "System Events" to log out'shutdown /l
通知框osascript -e 'display notification "Hi 灵儿" with title "SSH"'msg * "你好"

5. 安全性加固

使用 SSH 公钥:

ssh-keygen -t ed25519
ssh-copy-id youruser@localhost

禁用密码登陆:

sudo nano /etc/ssh/sshd_config# 修改:
PasswordAuthentication no
PermitRootLogin no

限制 ngrok TCP 访问:

ngrok tcp 22 --acl allow_cidr=203.0.113.0/24

6. 自动化脚本

启动 ngrok 并输出 URL

#!/bin/bash
ngrok tcp 22 > ~/ngrok.log &
sleep 2
grep -o 'tcp://.*' ~/ngrok.log | tee ~/ngrok_url.txt

一键锁屏:

ssh my-mac 'pmset displaysleepnow'

请下方评论让我知道你最喜欢哪一部分哟~

http://www.lryc.cn/news/584488.html

相关文章:

  • AI驱动的低代码革命:解构与重塑开发范式
  • Java观察者模式实现方式与测试方法
  • LUMP+NFS架构的Discuz论坛部署
  • 04-ES6
  • RuoYi-Cloud ruoyi-gateway 网关模块
  • 大数据时代UI前端的智能化升级:基于机器学习的用户意图预测
  • 在生信分析中,处理vcf 比较好用的python包推荐
  • 【PTA数据结构 | C语言版】顺序栈的3个操作
  • WebSocket实战:实现实时聊天应用 - 双向通信技术详解
  • Apache
  • AI探索 | 豆包智能助手跟扣子空间(AI办公助手)有什么区别
  • Java 与 MySQL 性能优化:MySQL连接池参数优化与性能提升
  • ClickHouse 查看正在执行的SQL查询
  • ClickHouse JSON 解析
  • 【图像处理基石】如何入门图像校正?
  • 线性探针是什么:是一种用于探测神经网络中特定特征的工具
  • C++STL-deque
  • 微算法科技的前沿探索:量子机器学习算法在视觉任务中的革新应用
  • Unity WebGL文本输入
  • 学习开发之条件函数
  • 二进制部署CentOS8.5+Kubernetes1.33.2+Docker28.3.1高可用集群
  • pdf_copy.ahk
  • 醋酸镨:闪亮的稀土宝藏,掀开科技应用新篇章
  • 软考(软件设计师)计算机网络-物理层,数据链路层
  • Android 如何阻止应用自升级
  • 如何使用python实现多个word文档格式进行修改
  • Android 15 Settings 搜索框:引入关键字过滤功能
  • uni-app X APP在线升级 解决【uni-upgrade-center-app】未配置uni-upgrade-center 问题
  • 20250710解决KickPi的K7的SDK编译异常:rk3576-android14.0-25250704.tar.gz【降低BUILD_JOBS】
  • 独立服务器选择Rocky Linux还是CentOS