创建隔离空间#

一个人用一个用户是一个 Linux 一个基本的一个设计。然而学校只让老师开用户,好多配置都混在一起,太混乱啦!

要不……咱把家目录改了吧?

隔离空间只能帮助创建一个相对隔离的空间。主要目的是:

  1. 防止自己在不知情的情况下,用了其他人的配置;
  2. 可以自己大胆进行一些配置,而不用担心影响其他人。

由于实际还是同一个用户,无法防止文件被访问和篡改。

第一步 生成一个 SSH 密钥#

如果您已经拥有 SSH 密钥,可以跳过此步。

为了实现隔离空间,必须使用密钥登录(否则不可能区分登录者的身份)。在本地设备上,使用下述命令即可生成密钥:

ssh-keygen

如果不明白自己在做什么,不停地按回车就对了(如果它提示文件已存在,说明以前曾生成过密钥,那可以直接跳过此步)。

在生成过程中,它会提示密钥文件的存放位置。其中一个文件以 .pub 为后缀名,它的内容应该类似这样:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBwLLOJbq3byqJ8/KREL+93wzIUjpXQ75SUTTXRdE4BH yueyi@DESKTOP-VE9QGI5

请记住这个文件在哪里,或者复制一份,我们后面需要用到这段内容。

另外一个没有后缀的文件是私钥。请保管好它,不要泄露。

第二步 连接超算平台#

在校园网内,使用下述指令即可连接超算平台:

ssh u13070@logini.tongji.edu.cn -p 10022

第三步 创建隔离环境#

在超算平台上执行:

~/register_space.cs

该脚本内部访问 HOME 环境变量构建路径,因此请确保目前没有位于隔离环境中( echo ~ 的输出是 /share/home/u13070 )。

它会依次问以下几个问题:

  1. 您想使用的隔离空间名称:相当于给自己取一个用户名(只能是字母、数字、下划线、减号,首个字符只能是字母,不少于四个字符);
  2. 请输入一项联系方式,以便遇到问题及时联系:尽量给一个能及时联系上的联系方式,没有输入格式限制;
  3. 请输入您的 SSH 公钥:在第一步中 .pub 文件的内容。

正常情况下,完整交互过程类似:

[u13070@logini02 ~]$ ~/register_space.cs
此脚本可辅助完成隔离空间的创建。如果您不清楚这是什么,可参考 https://tjslp-hpc.yueyinqiu.top/ 的使用说明。
您想使用的隔离空间名称:yueyinqiu
好的,隔离空间将会被创建在 /share/home/u13070/data/yueyinqiu
对应的全闪目录为 /ssdfs/datahome/u13070/yueyinqiu

请输入一项联系方式,以便遇到问题及时联系:yueyinqiu@outlook.com
好的,联系方式将记录为 yueyinqiu@outlook.com

请输入您的 SSH 公钥ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBwLLOJbq3byqJ8/KREL+93wzIUjpXQ75SUTTXRdE4BH yueyi@DESKTOP-VE9QGI5
好的,该公钥的指纹为 SHA256:dS40JD4zcty/XQWVo1Z/TRAU52QW2ok738JxbcBdZWI

正在创建隔离空间目录结构……
正在写入公钥……
已完成。
您现在可尝试使用该公钥进行登录,以进入隔离空间。

这会在隔离空间中创建一个 .ssh-command 文件。除非明确知道自己在做什么,否则请不要修改它。至少不要删除它。

第四步 尝试一下是否成功#

现在重新连接超算平台,尝试一下有没有成功进入隔离环境。

第五步 切换到其他设备或使用其他 SSH 密钥#

切换到其他设备时一般建议先按第一步重新生成一个密钥。

随后,登录到超算平台执行:

~/register_space.cs

该脚本内部访问 HOME 环境变量构建路径,因此请确保目前没有位于隔离环境中( echo ~ 的输出是 /share/home/u13070 )。

此时输入你隔离空间的名称。它会发现隔离空间已存在,并询问是否要添加 SSH 密钥,按上述流程继续即可。

实现细节#

原理#

https://www.cnblogs.com/yueyinqiu/p/19631295 。脚本可点此下载。

可能遇到的问题#

上述脚本需要 dotnet 执行,并需要安装 YueYinqiu.Su.DotnetRunFileUtilities 包。在本篇撰写时,这些网站是不能在超算平台访问的。为此,我们有部署一个代理服务,并配置在 /share/home/u13070/.bashrc 中。

如果代理服务正常运行,那么理论上不会出现问题。如果出现异常,并且包缓存被删除,那么包还原可能失败,导致脚本无法执行。可参考《连接到互联网》进行代理配置(尽管该篇是针对隔离环境撰写的,但实际区别不大)。