当前位置: 首页 > 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.dtcms.com/a/272101.html

相关文章:

  • Linux Vim 编辑器详解:从入门到进阶(含图示+插件推荐)
  • FPGA设计思想与验证方法系列学习笔记001
  • XCZU47DR-2FFVG1517I Xilinx FPGA AMD ZynqUltraScale+ RFSoC
  • 原生微信小程序研发,如何对图片进行统一管理?
  • 从代码生成到智能运维的革命性变革
  • 基于elementUI的el-autocomplete组件的自动补全下拉框实践
  • LFU 缓存
  • Vue2_element 表头查询功能
  • Vue+Element Plus 中按回车刷新页面问题排查与解决
  • pytorch 神经网络
  • 深入理解机器学习
  • 【深度学习新浪潮】什么是持续预训练?
  • 深度学习中的常见损失函数详解及PyTorch实现
  • B2、进度汇报(— 25/06/16)
  • Sigma-Aldrich细胞培养基础知识:细胞培养的安全注意事项
  • Vue 中监测路由变化时,通常不需要开启深度监听(deep: true)
  • 基于Python的旅游推荐协同过滤算法系统(去哪儿网数据分析及可视化(Django+echarts))
  • 《Stata面板数据分析:数据检验、回归模型与诊断技术 - 以NLSW工资研究(公开数据)为例》
  • android studio 运行,偶然会导致死机,设置Memory Settings尝试解决
  • 不止于快:金士顿XS2000移动固态硬盘如何重塑你的数字生活
  • 机器学习1
  • ssh: connect to host github.com port 22: connection refused
  • Web学习笔记2
  • 使用球体模型模拟相机成像:地面与天空的可见性判断与纹理映射
  • 「py数据分析」04如何将 Python 爬取的数据保存为 CSV 文件
  • 基于Python的程序员数据分析与可视化系统的设计与实现
  • 三、神经网络——网络优化方法
  • 线上事故处理记录
  • XMAPP MySQL 启动后自动停止
  • 【实战】Dify从0到100进阶--文档解读(1)开源许可和大模型适配