tailscale login 和 tailscale up 等 CLI 命令允许传入预授权密钥(auth key),无需通过浏览器登录就能连接新设备。这些命令用 –auth-key 指定密钥。如果直接把密钥传入命令,它可能保留在 shell 历史文件中。任何能访问历史文件的其他进程,都可能重复使用密钥,将未经授权的设备加入 Tailscale 网络。缓解风险的一种方法是使用一次性密钥,而不是可重复使用的密钥。 tailscale login tailscale up pre-authentication key one-off auth key reusable auth key
如果必须使用可重复使用的密钥,应通过环境变量将密钥传入命令。例如将密钥值赋给名为 TS_AUTH_KEY 的环境变量,就能在 CLI 调用中避免直接暴露密钥:
tailscale login --auth-key=$TS_AUTH_KEY
环境变量不必命名为 TS_AUTH_KEY,不过本文示例均使用这个名称。
环境变量的处理方式因平台和操作系统版本而异。示例适用于许多 Linux 和 macOS 系统上可用的较新 Bash 版本。如果没有使用 Bash,请查阅所用平台的环境变量文档。
创建环境变量 Create the environment variable
使用 export 命令创建环境变量。
下面的例子在不将密钥值作为命令参数传入的情况下设置环境变量,因此密钥不会留在历史记录中。生成密钥后,可以将其复制到剪贴板,再通过标准输入赋给环境变量。将变量设为 $(cat),然后按 Ctrl+v(macOS 上为 Cmd+v),再按 Ctrl+d: generate an auth key
# Use standard input to prevent the auth key from appearing in history
export TS_AUTH_KEY=$(cat)
<Ctrl+v><Ctrl+d>
如果不能使用 $(cat) 的方式,也可以直接给环境变量赋密钥值:
export TS_AUTH_KEY=<your-auth-key>
如果 HISTCONTROL 的值包含 ignorespace 或 ignoreboth,可以在 export 命令前加一个空格,防止密钥进入 history 文件: HISTCONTROL
# Use a space in front of the command to prevent the command from appearing
# in history output.
export TS_AUTH_KEY=<your-auth-key>
在依赖这种方法导出密钥之前,务必在设备上测试 HISTCONTROL 的 ignorespace 或 ignoreboth。具体来说,要确认带前导空格的命令确实不会出现在 history 文件中。
如果平台或操作系统不支持从历史文件中省略命令,或者误将密钥作为命令参数传入,可以手动删除历史记录。比如编辑 ~/.bash_history 或 ~/.zsh_history,删除包含密钥的行。某些情况下还可以运行 history,查出相应行号,再运行 history -d <line-number>。请查阅平台文档,了解删除历史文件中某行的方法。
使用环境变量 Use the environment variable
将环境变量传入命令,例如:
tailscale login --auth-key=$TS_AUTH_KEY
移除环境变量 Remove the environment variable
如果不再需要让环境变量保存密钥,运行以下命令:
unset TS_AUTH_KEY
如果不再需要保留密钥本身,可以撤销该密钥。 revoke the auth key











暂无评论内容