跳到主要内容

添加密钥

在控制台中添加​

  1. 在控制台中打开 SSH 密钥页面,地址是 /keys。
  2. 选择添加 SSH 密钥。
  3. 输入名称,最多 64 个字符 —— work laptop、desktop,只要能让你分清这是哪台机器就行。这个名称只是给你自己看的标签,不会发送到实例。
  4. 把 .pub 文件的全部内容粘贴到公钥中。
  5. 选择添加密钥。

该密钥会出现在列表中,并显示它的 SHA256 指纹以及添加时间。

粘贴完整的一整行,从 ssh-ed25519 一直到末尾的注释。Superheat 会对照接受的类型列表检查类型,并解码密钥内容,所以粘贴不完整、粘贴了私钥或使用了不受支持的算法,都会返回 INVALID_SSH_KEY。添加一个你已经有的密钥会返回 DUPLICATE_SSH_KEY,它按指纹匹配,而不是按名称。

密钥属于用户,不属于组织​

SSH 密钥属于你的用户账户。它会跟着你进入你所在的每一个组织,切换组织不会改变列表中的内容。

情况会发生什么
团队成员打开他们的 SSH 密钥页面他们看到的是自己的密钥,永远看不到你的
你切换到另一个组织你的密钥仍然在那里,没有变化
有人加入你的组织他们添加自己的密钥;不会共享任何东西
有人被移出组织他们的密钥留在他们自己的账户上

不存在组织级的密钥,一个实例部署时只带一个密钥:你在部署表单上选择的那一个。

密钥在启动时就固化了​

部署页面有一个 SSH 密钥选择器。它默认是不使用密钥(仅网页终端),所以你必须主动选择自己的密钥。

你选择的密钥会在实例创建过程中写入该实例的授权密钥列表。这是唯一会发生这件事的时刻。

操作对实例的影响
选好密钥后部署该密钥被安装,SSH 可用,适用于 ssh、jupyter 和 vm 启动模式
不选密钥就部署在该实例的整个生命周期内都不会安装任何密钥
之后再往账户里添加密钥已有的实例不受影响
停止实例后再启动它保留启动时带的那个密钥;不会重新读取任何内容
从 SSH 密钥页面删除某个密钥已经在运行的实例仍然保留它;新的部署无法再选择它

只有当模板的启动模式引导 Superheat 入口点时,密钥才会进入容器 —— 也就是 ssh、jupyter 和 vm。args 模板运行的是镜像自带的入口点,它不会启动 sshd,所以在那里选择密钥也没有任何东西可供你连接。参见启动模式。

实例上的 SSH 只认密钥。没有密码可以退而求其次。

在部署之前添加密钥,而不是之后

没有任何 API 调用、控制台操作或重启能给一个已经存在的实例装上密钥。如果你在没有密钥的情况下部署,重新部署是拿到 shell 的唯一办法。

如果你忘了​

实例仍然是你的,也仍然在计费 —— 你失去的是访问权限,不是机器或磁盘。

  1. 现在就在 SSH 密钥页面添加你的密钥,这样下一次部署就能用上它。
  2. 如果模板会启动 JupyterLab,从实例页面打开它,用它的终端把你需要的东西从磁盘上拷出来。
  3. 销毁该实例,然后选中密钥重新部署。

销毁会永久删除磁盘。动手之前先读停止与销毁。

停止再启动没有用。密钥是在实例创建时决定的,不是在它启动时。

通过 API​

方法路径作用
GET/v1/ssh-keys列出你的密钥及其指纹
POST/v1/ssh-keys添加密钥
DELETE/v1/ssh-keys/{key_id}删除密钥
{
"name": "work laptop",
"public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ8mQ2sT9vXbN1kR4pLwZ0aYcE7hJ6uD3fGgH5iKmNoP you@example.com"
}

返回的 id 就是你创建实例时作为 ssh_key_id 传入的值。

这些是账户级接口,只接受会话令牌 —— 组织 API 密钥(shk_…)在这三个接口上都会被拒绝。部署时 API 密钥仍然可以传入 ssh_key_id。personal 密钥指定的,必须是创建它的那个用户的密钥;team 密钥代表组织行事,可以指定当前任何一位成员的密钥,但不能指定已离开的人的——包括它自己的创建者。参见身份验证和 API 密钥。

密钥添加好之后,继续去部署,然后通过 SSH 连接。