配置
开始使用无需任何配置。当你想了解背后发生了什么时,可以看这一页。
谁可以访问
默认情况下,请求需要通过两项检查:
- 你的账号。隧道是私有的:Dev Tunnels 中继只放行运行
coderemote up的那个 GitHub 或 Microsoft 账号。 - 你的手机。 二维码中的令牌让手机可以登记。此后它用自己的密钥登录,这个密钥在其 Secure Enclave 中生成且从不离开,单凭令牌无法打开其他任何东西。
coderemote devices列出手机;coderemote devices revoke移除其中一部。
手机和代理之间的一切都用电脑的密钥进行端到端加密,这个密钥由二维码携带:中间的中继只转发密文。打开终端、在编程代理中输入或启动它,以及开始构建时,也会要求 Face ID。coderemote devices policy 设置严格程度(从不、命令、或命令和更改)以及一次验证的有效时长(5 分钟、30 分钟或一小时)。
使用 coderemote up --allow-anonymous 时会跳过第一项检查。无论哪种方式,文件和 git 都留在共享文件夹内;终端是以你的用户权限运行的真正 shell。
预览的公开链接是唯一的例外:在它结束之前,任何拿到链接的人都能打开那一个开发服务器,不需要经过这两项检查。它永远不会触及智能体、它的文件或它的终端。
你电脑上的文件
所有内容都在 ~/.coderemote(Windows 上是 %USERPROFILE%\.coderemote)中,仅你自己可读:
| 路径 | 内容 |
|---|---|
config.json | 访问令牌、这台电脑的隧道 id 以及它的预览隧道 id。保留它就保留了所有配对。 |
e2e/, lan/ | 这台电脑的端到端加密密钥,以及你网络中的手机所校验的证书。由 rotate-token 更换。 |
devices/ | 每个共享文件夹已登记的手机及其 Face ID 设置。rotate-token 会将其清空。 |
bin/ | 首次运行时下载的 Dev Tunnels CLI。 |
agents/ | 每个运行中的智能体一条记录,让 status、kill 和 stop 能找到它。 |
update.json | npm 上的最新版本,以及 up 上次询问的时间,每天最多一次。 |
runtime/ | 仅在安装脚本下载了 Node.js 之后才有:那份 Node.js 以及安装在其中的 coderemote,还有 runtime/bin 里它加入你 PATH 的 coderemote 和 node 命令。 |
删除该文件夹(如果它是安装脚本创建的,请保留 runtime/)会重置 Code Remote:下一次 up 会创建新的令牌和隧道,所有设备都必须重新配对。
环境变量
| 变量 | 作用 |
|---|---|
CODEREMOTE_DEVTUNNEL | 要使用的 devtunnel 二进制文件的路径。否则使用 PATH 中的那个,然后是下载的副本。 |
CODEREMOTE_CODE | VS Code 的 code 命令的路径,用于 up --web。否则使用 PATH 中的 code。 |
CODEREMOTE_NO_UPDATE_CHECK | 设为 1 后,up 不再向 npm 询问是否有更新的版本。 |
安装脚本还会读取一些它们自己的变量:
| 变量 | 作用 |
|---|---|
CODEREMOTE_VERSION | 要安装的版本或 npm dist-tag,例如 0.3.7 或 next。默认为 latest。 |
CODEREMOTE_PRIVATE_NODE | 设为 1 可让脚本即使在你的 Node.js 已足够新时,也为 coderemote 下载 Node.js。 |
CODEREMOTE_NO_MODIFY_PATH | 设为 1 可不改动你的 PATH 和 shell 启动文件;脚本会告诉你需要添加哪个文件夹。 |
隧道
每台电脑有一个隧道。它的 URL 在多次运行之间保持不变,up 每次都会续期,使它不会过期。一次共享一个文件夹;要访问多个项目,请共享它们的上级文件夹,Git 标签页会找到其中的每个仓库。
该隧道带有标签 coderemote,应用就是靠它找到你的其他机器。预览使用第二个隧道,标签为 coderemote-preview,在第一次预览时创建,并在智能体停止时删除(工作原理)。coderemote tunnels 会同时列出两者,以及你其他电脑的隧道。
一个 Dev Tunnels 账号最多保留 10 个隧道。你不再使用的电脑会一直保留它们的隧道,直到你用 coderemote tunnels delete 删除。
在应用中
- Machine Info(机器的菜单)显示它的隧道:地址、账号、谁可以访问、何时过期(每次
coderemote up启动都会顺延)、当前已连接的客户端、迄今的流量,以及正在预览的端口数。 - Settings › Connections 列出你已配对的电脑所连接的账号。每个账号会显示该账号下运行 coderemote 的每台电脑、是否在线、这部 iPhone 是否已与之配对,以及该账号的 10 个隧道中已用了多少个。要添加电脑,请在那台电脑上运行
coderemote up并扫描它的二维码。
应用只负责显示它们:隧道属于电脑的所有者,所以你要在已登录该账号的电脑上,用 coderemote tunnels 列出和删除它们。为此,在 Connections 中按住某台机器即可复制它的隧道 ID。从应用列表中移除某台机器,只会让那部 iPhone 忘记它。
故障排查
"Port 31580 is already in use"
另一个智能体或程序占用了该端口。coderemote status 会显示智能体;其他情况请查看是什么占用了它:
$ lsof -nP -iTCP:31580 -sTCP:LISTEN # macOS, Linux PS> netstat -ano | findstr :31580 # Windows
停止它,运行 coderemote stop --all,或用 --port 选择另一个端口。
手机无法连接
确认 coderemote up 仍在运行,并且电脑处于唤醒和联网状态。确保手机登录的是电脑所使用的同一个账号(显示在 Access: 那一行)。
"Your Dev Tunnels account already has 10 tunnels"
账号已满,而且其中没有可以清理的闲置预览隧道。提示信息会列出它们:用 coderemote tunnels delete <id> 删除不再使用的,例如旧电脑留下的,然后再次运行 coderemote up。
登录已过期
up 会发现这一点并重新打开浏览器。如果没有浏览器,请运行 coderemote login --device-code。
Ports 标签页提示"Update coderemote"
电脑上运行的 coderemote 早于端口与预览功能。运行 coderemote update,然后重启 coderemote up。
预览提示"nothing is listening on port …"
背后的开发服务器已停止,或已在另一个端口上重启。请重新启动并刷新;Ports 标签页会显示当前正在监听的内容。
在 Linux 上安装失败
终端支持会在安装时编译,需要 python3、make 和 C++ 编译器(Debian 和 Ubuntu 上是 build-essential)。登录需要 libsecret-1-0。
还是没解决?请查看支持。