借助校园网限制实现跨平台文件互传与远程串流
本次用到的工具
Windows
- Sunshine
- OpenSSH Server
- PowerShell
- Wireshark
- 校园网拨号连接(Windows
rasdial)
macOS
- Moonlight / VoidLink
- OpenSSH Client
- macFUSE
- SSHFS
- 终端脚本
iPad
Android
作者的脚本
前情提要与启发
由于我有多设备开发和娱乐需求,经常需要在校园网环境下实现:
- Mac 远程访问宿舍 Windows 电脑;
- iPad / 手机串流 Windows 桌面;
- Mac、iPad、Android 与 Windows 之间传输文件;
- 在 Mac 上写代码,但文件实际保存在 Windows 上;
- 在宿舍电脑不方便直接操作时,通过其他设备接管工作流。
一开始我以为这类需求直接用 Windows 文件共享,也就是 SMB,就可以解决。
理论上 macOS 的 Finder 可以直接连接:
smb://[服务器 ip 地址]/share_macosiPad 的“文件”App 也可以连接 SMB 服务器。
但是实际测试后发现:在手机热点环境下,SMB、串流、文件传输都可以正常使用;一旦切换到校园网,串流仍然可用,但 SMB 文件共享会失败。
一、先确认校园网下设备能否互通
Windows 校园网拨号后得到的地址是:
[服务器 ip 地址]在 Mac 上测试:
ping [服务器 ip 地址]结果能 ping 通,说明网络层不是完全隔离。
但是 ping 通不代表 SMB 一定能用,因为:
ping 使用 ICMPSMB 使用 TCP 445SSH/SFTP 使用 TCP 22所以继续测试 SMB 端口:
nc -G 5 -vz [服务器 ip 地址] 445结果出现:
Operation timed out也就是说,Mac 能找到 Windows,但访问不了 Windows 的 445 端口。
随后在 Windows 上用 Wireshark 抓包,过滤器使用:
ip.addr == [服务器 ip 地址] && tcp.port == 445并让 Mac 再次执行:
nc -G 5 -vz [服务器 ip 地址] 445Windows 这边没有看到任何 445 数据包。
这说明问题不是 Windows 文件共享没有开启,也不是 Windows 防火墙普通规则没有放行,而是:
Mac 发出的 TCP 445 请求根本没有到达 Windows
因此可以判断:校园网链路大概率屏蔽了 SMB 的 445 端口。
二、为什么串流能用,但 SMB 不行?
这也是这次折腾里最容易误判的地方。
我使用 Sunshine 作为 Windows 串流服务端,Mac、iPad、Android 端使用 Moonlight / VoidLink 作为客户端。
串流能正常发现或手动连接 Windows,说明:
校园网没有完全阻断设备互访但是 SMB 失败说明:
校园网可能只屏蔽了部分高风险端口,比如 TCP 445SMB 文件共享经常被蠕虫、横向移动、勒索软件利用,所以很多公共网络、校园网、运营商网络都会限制 445 端口。
因此最后结论是:
串流可以继续使用 Sunshine + Moonlight / VoidLink文件共享不能继续依赖 SMB三、文件互传最终方案:OpenSSH + SFTP
既然 SMB 的 445 端口被挡,那就换一个协议。
我测试了 SSH 的 22 端口:
nc -G 5 -vz [服务器 ip 地址] 22结果成功:
succeeded所以最终选择:
Windows 开 OpenSSH ServerMac / iPad / Android 通过 SFTP 访问 Windows 文件这不是内网穿透,也不需要第三方服务器。它只是让 Windows 在校园网 IP 上提供 SSH/SFTP 服务。
方案实施
本部分按照“服务器端”和“控制端”来组织。服务器端指真正存放文件、运行串流服务的 Windows;控制端指用于访问、开发、串流的 Mac、iPad 和 Android。
一、服务器端:Windows
服务器端方案规划表
| 目标 | 使用工具 / 协议 | 实现效果 |
|---|---|---|
| 远程文件访问 | OpenSSH Server / SFTP | 让 Mac、iPad、Android 通过 22 端口访问 F:\share_macos |
| 文件权限隔离 | Windows 本地用户 + icacls | 创建专用 SFTP 用户,只授权到共享目录 |
| 远程串流 | Sunshine | 让 Mac、iPad、Android 通过 Moonlight / VoidLink 控制 Windows |
| 网络状态维护 | 自动拨号脚本 | 校园网断线后自动重拨 |
| 问题定位 | Wireshark / nc / ping | 判断是网络层、端口层还是服务层的问题 |
1. 确认服务器端在校园网的地址
在 Windows 管理员 Cmd 中执行:
ipconfig输出差不多是:
Windows IP 配置
PPP 适配器 [这里是你拨号时对校园网起的名字]:
IPv4 地址 . . . . . . . . . . . . : [好像网线连接都是10.xxx.xxx.xxx的格式] 子网掩码 . . . . . . . . . . . . : [作者去除了信息喵] 默认网关. . . . . . . . . . . . . : [作者去除了信息喵] DNS 服务器 . . . . . . . . . . . : [作者去除了信息喵]
未知适配器 Tailscale:
连接特定的 DNS 后缀 . . . . . . . : 本地链接 IPv6 地址. . . . . . . . : [作者去除了信息喵] 自动配置 IPv4 地址 . . . . . . . : [作者去除了信息喵] 子网掩码 . . . . . . . . . . . . : [作者去除了信息喵] 默认网关. . . . . . . . . . . . . :
无线局域网适配器 WLAN:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接 连接特定的 DNS 后缀 . . . . . . . :
无线局域网适配器 WLAN 2:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接 连接特定的 DNS 后缀 . . . . . . . :[作者去除了信息喵]
无线局域网适配器 WLAN 4:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接 连接特定的 DNS 后缀 . . . . . . . :[作者去除了信息喵]
以太网适配器 以太网:
连接特定的 DNS 后缀 . . . . . . . :[作者去除了信息喵] 本地链接 IPv6 地址. . . . . . . . : [作者去除了信息喵] IPv4 地址 . . . . . . . . . . . . : [作者去除了信息喵] 子网掩码 . . . . . . . . . . . . : [作者去除了信息喵] 默认网关. . . . . . . . . . . . . : [作者去除了信息喵]以太网适配器 蓝牙网络连接:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接 连接特定的 DNS 后缀 . . . . . . . :如果你是网线连接的校园网,那请你着重看 PPP 适配器 这一部分,并记住IPv4 地址 : 10.x.x.x,它将用于定位服务器,请务必记牢。
2. 开启 OpenSSH Server
在 Windows 管理员 PowerShell 中执行:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0Start-Service sshdSet-Service -Name sshd -StartupType AutomaticNew-NetFirewallRule -Name sshd -DisplayName "OpenSSH Server" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22之后在 Mac 上测试:
ssh [服务器中的用户名]@[服务器 ip 地址]第一次连接时会出现:
The authenticity of host '[服务器 ip 地址]' can't be established.Are you sure you want to continue connecting?输入:
yes然后输入 Windows 账户密码。成功后会进入类似:
C:\Users\[服务器中的用户名]>这说明 Mac 已经可以通过 SSH 进入 Windows。
3. 创建专用 SFTP 用户
为了避免把 Windows 主账户暴露给所有设备,我后来创建了一个专用账户。
在 Windows 管理员 PowerShell 中执行:
net user [用户名] "你的密码" /add然后给它访问共享目录的权限:
icacls "F:\share_macos" /grant "[用户名]:(OI)(CI)F" /T这里:
F:\share_macos就是我作为跨平台共享中心的文件夹。
以后 Android、iPad、Mac 都可以使用:
协议:SFTP地址:[服务器 ip 地址]端口:22用户名:[用户名]密码:你的密码4. 配置 Sunshine 串流服务端
文件传输部分走 SFTP,而串流部分继续使用 Sunshine。
Windows 作为串流服务端运行 Sunshine,控制端的具体连接方式统一放到后文 “四、控制端串流:Mac / iPad / Android” 中说明。
连接时控制端一般使用 Windows 的校园网 IP:
[服务器 ip 地址]串流之所以能用,是因为它不依赖 SMB 的 445 端口,而是使用 Sunshine 自己的串流服务端口。
最后,如果你发现电脑和串流设备处于同一校园网时,无论串流软件或者手动输入端口都无法检测到服务端,请务必检查你是否处于专用网络模式下,不能是公共网络,否则电脑无法被其他设备发现。
5. 自动拨号脚本
由于校园网拨号偶尔会掉线/顶号,我还写了一个自动拨号脚本。
目录结构:
[文件夹]├── auto_redial.ps1 // 拨号主脚本├── toggle_switch.bat // 自动拨号开关,点击即可切换├── switch.txt // 存放开关信息└── redial.log // 存放日志信息其中:
switch.txt = 1 表示开启自动重拨switch.txt = 0 表示暂停自动重拨auto_redial.ps1
$connectionName = "校园网连接"$username = "你的校园网账号"$password = "你的校园网密码"
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path$logFile = Join-Path $scriptDir "redial.log"$switchFile = Join-Path $scriptDir "switch.txt"
if (!(Test-Path $switchFile)) { "1" | Out-File $switchFile -Encoding ascii}
function Write-Log { param([string]$Message) $time = Get-Date -Format "yyyy-MM-dd HH:mm:ss" "[$time] $Message" | Out-File $logFile -Append -Encoding utf8}
Write-Log "auto redial script started"
while ($true) { try { $enabled = (Get-Content $switchFile -Raw).Trim()
if ($enabled -ne "1") { Write-Log "auto redial paused by switch.txt" Start-Sleep -Seconds 10 continue }
$ok1 = Test-Connection -ComputerName 223.5.5.5 -Count 1 -Quiet -ErrorAction SilentlyContinue $ok2 = Test-Connection -ComputerName 1.1.1.1 -Count 1 -Quiet -ErrorAction SilentlyContinue
if ($ok1 -or $ok2) { Write-Log "network ok" } else { Write-Log "network down, redialing..."
rasdial $connectionName /disconnect | Out-File $logFile -Append -Encoding utf8 Start-Sleep -Seconds 2
rasdial $connectionName $username $password | Out-File $logFile -Append -Encoding utf8
Write-Log "redial command executed" } } catch { Write-Log "error: $_" }
Start-Sleep -Seconds 10}运行:
powershell -ExecutionPolicy Bypass -File "F:\temp_package\command\auto_redial.ps1"toggle_switch.bat
为了避免每次手动编辑 switch.txt,再写一个开关脚本:
@echo offsetlocal
set SCRIPT_DIR=%~dp0set SWITCH_FILE=%SCRIPT_DIR%switch.txt
if not exist "%SWITCH_FILE%" ( echo 1>"%SWITCH_FILE%")
set /p STATE=<"%SWITCH_FILE%"
if "%STATE%"=="1" ( echo 0>"%SWITCH_FILE%" echo auto redial paused) else ( echo 1>"%SWITCH_FILE%" echo auto redial enabled)
pause这里刻意使用英文输出,是为了减少 Windows 控制台编码导致的乱码问题。
二、控制端总览
控制端分为三类:
| 控制端 | 主要需求 | 最终方案 |
|---|---|---|
| Mac | 文件挂载、文件上传、文件下载、远程开发、串流 | SSHFS、winup、SSH 免密、Moonlight / VoidLink |
| iPad | 文件浏览、轻量编辑、串流 | Secure ShellFish、Moonlight / VoidLink |
| Android | 文件管理、移动端上传下载、串流 | MT 管理器 SFTP、Moonlight |
三、控制端文件互传与远程开发
1. Mac:SSHFS 挂载与 winup 上传
Mac 方案规划表
| 目标 | 使用工具 / 命令 | 实现效果 |
|---|---|---|
| 像 SMB 一样在 Finder 里看 Windows 文件夹 | macFUSE + SSHFS | 将 F:\share_macos 挂载为 ~/Mounts/win-share磁盘 |
| 一键重新挂载 | mount-win-share.command | 双击脚本自动清理坏挂载并重新挂载 |
| 免密码挂载 | SSH 密钥 | 避免每次挂载都输入密码 |
| 上传普通文件 / 文件夹 | winup 函数 | 自动清理 macOS 扩展属性,并用 cp / rsync 上传 |
| 远程开发 | VS Code Remote-SSH | 代码实际保存在 Windows,Mac 只作为编辑端 |
1. 用 SSHFS 挂载 Windows 文件夹
Mac 上直接用 SFTP 客户端可以访问 Windows 文件,但我更希望达到类似 SMB 的效果(可以像打开磁盘一样使用文件夹)
Finder 左侧能看到一个 win-share点进去就是 Windows 的 F:\share_macos所以我使用了:
macFUSE + SSHFS最终挂载路径为:
~/Mounts/win-shareWindows 远程路径为:
[服务器 ip 地址]:/F:/share_macos2. 自动挂载脚本 mount-win-share.command
保存为:
~/Desktop/mount-win-share.command内容如下:
#!/bin/zsh
MOUNT="$HOME/Mounts/win-share"REMOTE="[服务器中的用户名]@[服务器 ip 地址]:/F:/share_macos"
mkdir -p "$MOUNT"
# 如果已经挂载,先强制卸载,避免坏挂载残留diskutil unmount force "$MOUNT" >/dev/null 2>&1umount -f "$MOUNT" >/dev/null 2>&1
# 挂载sshfs "$REMOTE" "$MOUNT" \ -o volname=win-share \ -o reconnect \ -o ServerAliveInterval=15 \ -o ServerAliveCountMax=3 \ -o defer_permissions \ -o idmap=user \ -o umask=000 \ -o cache=yes \ -o cache_timeout=120 \ -o dcache_timeout=120 \ -o noappledouble \ -o noapplexattr \ -o follow_symlinks \ -o workaround=rename
open "$MOUNT"保存后给执行权限:
chmod +x ~/Desktop/mount-win-share.command之后双击这个脚本,就会自动把 Windows 文件夹挂载到 Finder。
3. SSH 密钥免密登录
为了避免每次挂载都输入密码,可以给 Mac 配置 SSH 密钥。
在 Mac 上生成密钥:
ssh-keygen -t ed25519查看公钥:
cat ~/.ssh/id_ed25519.pub将公钥写入 Windows 的 authorized_keys。
如果 Windows 用户是普通用户,一般写入:
C:\Users\[服务器中的用户名]\.ssh\authorized_keys如果是管理员账户,有时还需要写入:
C:\ProgramData\ssh\administrators_authorized_keys并修复权限:
icacls C:\ProgramData\ssh\administrators_authorized_keys /inheritance:ricacls C:\ProgramData\ssh\administrators_authorized_keys /grant "Administrators:F" /grant "SYSTEM:F"Restart-Service sshd配置好后,在 Mac 上测试:
ssh [服务器中的用户名]@[服务器 ip 地址]如果不再要求输入密码,就说明免密成功。
4. Mac 上传辅助函数 winup
SSHFS 可以像本地文件夹一样使用,但实际体验中遇到了一个问题:
macOS 文件经常带有扩展属性、资源叉、.DS_Store、._xxx 等元数据。
直接拖动文件到 SSHFS 挂载目录时,可能会报:
Operation not permittedcould not copy extended attributes最后发现,清理扩展属性后就能正常上传。
所以我写了一个 winup 函数,并加入到mac的环境变量中,用来上传文件或文件夹到 Windows 共享目录。
编辑:
nano ~/.zshrc加入:
winup() { if [ $# -lt 1 ]; then echo "用法:" echo " winup 源文件或文件夹" echo " winup 源文件或文件夹 目标文件夹" echo "" echo "示例:" echo " winup ~/Desktop/test.txt" echo " winup ~/Desktop/test.txt docs" echo " winup ~/Code_Practice Code_Backup" echo " winup ~/Code_Practice ~/Mounts/win-share/Code_Backup" return 1 fi
SRC="$1" DEFAULT_DEST="$HOME/Mounts/win-share" DEST_INPUT="$2"
if [ ! -e "$SRC" ]; then echo "源路径不存在: $SRC" return 1 fi
if [ ! -d "$DEFAULT_DEST" ]; then echo "默认挂载点不存在: $DEFAULT_DEST" echo "请先挂载 win-share" return 1 fi
# 如果没有指定目标文件夹,就上传到默认 win-share 根目录 if [ -z "$DEST_INPUT" ]; then DEST="$DEFAULT_DEST" else # 支持直接输入完整挂载路径 if [[ "$DEST_INPUT" == /* ]]; then DEST="$DEST_INPUT" else # 支持输入相对 Windows 共享目录的子文件夹名 DEST="$DEFAULT_DEST/$DEST_INPUT" fi fi
mkdir -p "$DEST"
echo "源路径: $SRC" echo "目标路径: $DEST"
# 清理 macOS 扩展属性和 AppleDouble 文件 xattr -rc "$SRC" 2>/dev/null dot_clean "$SRC" 2>/dev/null
if [ -d "$SRC" ]; then BASENAME="$(basename "$SRC")" TARGET="$DEST/$BASENAME"
mkdir -p "$TARGET"
COPYFILE_DISABLE=1 rsync -rtv --inplace --whole-file \ --no-perms \ --no-owner \ --no-group \ --omit-dir-times \ --exclude='.DS_Store' \ --exclude='._*' \ "$SRC/" "$TARGET/" else COPYFILE_DISABLE=1 cp -X "$SRC" "$DEST/" fi}保存后执行:
source ~/.zshrc使用示例:
上传单个文件:
winup ~/Desktop/test.txt上传到 Windows 共享目录下的 docs 文件夹:
winup ~/Desktop/test.txt docs上传整个文件夹:
winup ~/Code_Practice上传整个文件夹到指定目录:
winup ~/Code_Practice Code_Backup这个函数最终解决了:
- macOS 扩展属性导致复制失败;
- Finder 拖拽上传不稳定;
- rsync 临时文件重命名失败;
- SSHFS 上大量小文件传输失败。
其中最关键的是:
--inplace--whole-file--omit-dir-timesCOPYFILE_DISABLE=12. iPad:Secure ShellFish 文件访问
iPad 方案规划表
| 目标 | 使用工具 / 协议 | 实现效果 |
|---|---|---|
| 在 iPad 上浏览 Windows 文件 | Secure ShellFish / SFTP | 通过 22 端口访问 Windows 文件系统 |
| 在“文件”App 中显示远程目录 | ShellFish 文件提供器 | 像访问云盘一样访问 Windows 文件 |
| 快速进入共享目录 | 默认路径或目录联接 | 直接进入 F:\share_macos |
1. 使用 Secure ShellFish 连接 Windows
iPad 的“文件”App 原生可以连接 SMB,但是校园网挡了 445,所以不能继续走 SMB。
最后我使用:
Secure ShellFish相关项目:Secure ShellFish
它可以通过 SFTP 连接 Windows,并且可以显示到 iPad 的“文件”App 里。
连接信息:
协议:SFTP主机:[服务器 ip 地址]端口:22用户名:[用户名]密码:你的密码进入后找到:
F:└── share_macos如果想让默认进入这个目录,可以尝试设置初始路径:
F:/share_macos或者:
/F:/share_macos如果客户端不支持默认路径,也可以在 Windows 用户目录下创建一个目录联接:
mklink /J C:\Users\[用户名]\share_macos F:\share_macos这样 iPad 连接进去后,默认用户目录里就会出现:
share_macos点进去就是真正的:
F:\share_macos3. Android:MT 管理器文件访问
Android 方案规划表
| 目标 | 使用工具 / 协议 | 实现效果 |
|---|---|---|
| 在 Android 上管理 Windows 文件 | MT 管理器 / SFTP | 浏览、下载、上传 Windows 文件 |
| 避免认证错误 | 密码登录 | 避免误选私钥导致 invalid privatekey |
| 快速进入共享目录 | 默认路径 | 进入 F:/share_macos |
1. MT 管理器远程连接服务器
Android 上使用 MT 管理器 的“远程连接服务器”功能。
一开始我误把认证方式设置成了“密钥”,结果报错:
invalid privatekey后来发现我根本不需要私钥,直接选择“密码登录”即可。
正确配置:
协议:SFTP地址:[服务器 ip 地址]端口:22用户名:[用户名]密码:你的密码认证方式:密码注意不要选择私钥文件,否则 MT 管理器会继续尝试用私钥登录,并报:
invalid privatekey进入后同样找到:
F:└── share_macos如果 MT 管理器支持默认路径,可以填:
F:/share_macos不要写成:
[服务器 ip 地址]/F:/share_macos因为:
[服务器 ip 地址] 是服务器地址F:/share_macos 是远程路径两者不是同一个字段。
四、控制端串流:Mac / iPad / Android
控制端串流方案规划表
| 控制端 | 使用工具 | 连接方式 | 实现效果 |
|---|---|---|---|
| Mac | Moonlight / VoidLink | 自动发现或手动添加 [服务器 ip 地址] | 在 Mac 上远程控制 Windows 桌面 |
| iPad | Moonlight / VoidLink | 自动发现或手动添加 [服务器 ip 地址] | 在 iPad 上远程控制 Windows,适合轻量操作和娱乐 |
| Android | Moonlight | 自动发现或手动添加 [服务器 ip 地址] | 在手机上远程控制 Windows,适合临时操作 |
1. Mac & ipad 串流
这里更加推荐 VoidLink ,虽然要付一点钱,但是它是基于 Moonlight 的优化版,延迟更低,还有ipencil的笔迹优化(嗯,还要价钱,请量力而行),然后 Moonlight 也可以,且是免费的。
2. Android 串流
Android 端只有moonlight可以用,但是有许多大神的修改版,比原版更好用,这里不给出链接,请读者自己寻找安装包。
3. 串流异常排查
如果控制端无法搜索到 Windows 主机,可以按下面顺序检查:
- Windows 当前网络是否为“专用网络”,而不是“公用网络”;
- Sunshine 是否正在运行;
- 控制端是否能 ping 通
[服务器 ip 地址]; - 是否能通过手动添加 IP 连接;
- Windows 防火墙是否允许 Sunshine 相关入站连接;
- 如果 Sunshine 服务无法正常启动,可以优先尝试安装到 C 盘下的固定目录。
踩过的坑
1. Ping 通不代表 SMB 通
最开始我能 ping 通:
ping [服务器 ip 地址]但 SMB 仍然连接失败。
原因是:
ping 走 ICMPSMB 走 TCP 445两者完全不是一个东西。
2. Sunshine 能串流,不代表 SMB 能访问
Sunshine 能连接,只能说明它自己的端口能走通。
SMB 的 445 端口被挡时,串流仍然可以正常运行。
3. macOS Finder 拖拽到 SSHFS 可能失败
报错类似:
could not copy extended attributesOperation not permitted原因通常是 macOS 扩展属性、资源叉、.DS_Store、._xxx 等元数据。
解决办法:
xattr -rc 文件或文件夹dot_clean 文件或文件夹COPYFILE_DISABLE=1 cp -X 文件 ~/Mounts/win-share/或者直接使用我写的:
winup 文件或文件夹4. rsync 默认临时文件重命名会失败
最开始上传文件夹时报错:
move_file: Operation not permitted原因是 rsync 会先创建临时文件,再 rename 成目标文件。
SSHFS + Windows SFTP 对这种 rename 覆盖操作兼容性不好。
解决办法是加:
--inplace--whole-file--omit-dir-times5. MT 管理器不要误选私钥登录
如果选择了私钥登录,但导入的私钥格式不支持,就会报:
invalid privatekey如果只是普通密码登录,一定要选择:
认证方式:密码不要选择:
认证方式:密钥6. Windows PIN 不是 SSH 密码
Windows Hello、PIN、指纹都不是 SSH 密码。
OpenSSH 要的是 Windows 账户真实密码,或者专门创建的本地账户密码。
7. 无法搜索到电脑?
请务必打开专用网络,而非公用网络
8. Sunshine 无法正常启动?
Sunshine 的服务环境有点依赖系统,所以请装入C盘。如果怕弄脏C盘,请单独创建文件夹用于存放类似服务。
9. 我要不要尝试内网穿透?
可以,但是请根据你学校的情况弄。内网穿透具有一定风险,会将你的电脑暴露在校园网之外,容易被不法分子攻击。作者学校明令禁止了内网穿透的行为。
最终方案总结
最后形成的方案是:
| 场景 | 方案 |
|---|---|
| Windows 远程串流 | Sunshine |
| Mac / iPad / Android 串流 | Moonlight / VoidLink |
| Windows 文件服务 | OpenSSH Server |
| Mac 访问 Windows 文件 | SSHFS |
| Mac 上传文件 | winup 函数 |
| iPad 访问 Windows 文件 | Secure ShellFish |
| Android 访问 Windows 文件 | MT 管理器 SFTP |
| 校园网掉线重拨 | PowerShell 自动拨号脚本 |
最终效果是:
Windows 作为主机和文件中心Mac 负责远程开发iPad 负责轻量访问与串流Android 负责移动端文件管理虽然 SMB 被校园网屏蔽了,但通过 SSH/SFTP,依然可以实现一个比较完整的跨平台工作流。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!



