有没有办法处理内存中的命令行参数?我的具体问题是,我有一个用 luks 加密的卷,带有一个分离的头文件。
设置如下:
- 工作站
- 服务器
我不想将头文件存储在服务器所以我继续工作站当我想解密 luks 卷时,我想从另一台机器发出一个简单的 ssh 命令,而不将头文件存储在服务器例如:
sh
ssh [email protected] "cryptsetup luksOpen /dev/mdx/ --header=... volume1"
有没有办法将头文件本地保存在工作站,并且只通过 ssh 连接传输文件的内容,这些内容由服务器侧并视为本地文件参数?
这里的问题是(据我所知),cryptsetup
打开并读取指定为的文件--header
。有没有一种 Linux/UNIX 方法来伪造这个,并将文件的内容“推送/注入”到命令中?
目前我正在使用一个 USB 记忆棒,其中存储了标题。
我希望我想要的很清楚,英语不是我的母语,也许在翻译中遗漏了一些东西。
编辑:每次重启后,文件存储/复制到 temp/ram-fs 怎么样?我刚发现有默认的 tempfs,/dev/shm
使用它安全吗?
答案1
文件系统/dev/shm
是为共享内存而设计的。如在这篇 Cyberciti 文章:
/dev/shm 只不过是传统共享内存概念的实现。它是在程序之间传递数据的有效方法。一个程序将创建一个内存部分,其他进程(如果允许)可以访问该部分。这将加快 Linux 的速度。
就像/tmp
现代 Linux 上的 tmpfs 文件系统一样,您存储在那里的任何东西都会保留在内存中,并在重新启动时被删除。但是,我不知道有什么原因不能用它/dev/shm
来存储您想要访问的文件。我可以确认,在我工作的地方,我们经常/dev/shm
在生产系统中使用它来存储一组文件,这些文件将被许多程序使用,并且在每次启动时都会创建。
因此,我想说,如果这是解决问题的有效方法,那么您可以继续在每次启动时将文件存储在那里。
答案2
您可能能够使用进程替换<(command)
。它将被替换为一个临时文件名,该文件名代表包含命令输出的管道。
ssh [email protected] cryptsetup luksOpen /dev/mdx/ --header=<(cat) volume1 < /path/to/headerfile