Der*_*ler 6 freebsd ssh freenas
我正在为 FreeNAS 系统进行基于 rsync 的备份。
备份过程的一部分涉及登录用作备份存储的远程系统。每当我这样做时,我都会收到消息
Could not create directory '/root/.ssh'.
Run Code Online (Sandbox Code Playgroud)
我假设这是因为它/root
是只读的,因为当我尝试~/.ssh
手动创建时,我收到:
mkdir: /root/.ssh: Read-only file system
Run Code Online (Sandbox Code Playgroud)
因此,我已经移动了known_hosts
更适合我的备份过程的文件,并-o UserKnownHostsFile
用于解决与此相关的任何问题。
但是,当我调用它时ssh
仍然尝试创建~/.ssh
文件夹。我怎样才能让它不尝试创建文件夹?
小智 7
这里提到的解决方案很好,但我正在寻找一个不需要 ~/.ssh 存在或需要尝试创建它的解决方案(在 Windows 上运行,分发 MSYS 构建的 ssh.exe,但运行在其他没有安装 MSYS/Cygwin 的机器)。
不幸的是,无论您赋予什么值,该例程似乎都在源代码中进行了硬编码UserKnownHostsFile
:
r = snprintf(buf, sizeof buf, "%s%s%s", pw->pw_dir,
strcmp(pw->pw_dir, "/") ? "/" : "", _PATH_SSH_USER_DIR);
if (r > 0 && (size_t)r < sizeof(buf) && stat(buf, &st) < 0) {
#ifdef WITH_SELINUX
ssh_selinux_setfscreatecon(buf);
#endif
if (mkdir(buf, 0700) < 0)
error("Could not create directory '%.200s'.",
buf);
#ifdef WITH_SELINUX
ssh_selinux_setfscreatecon(NULL);
#endif
}
Run Code Online (Sandbox Code Playgroud)
但是,有趣的是它会尝试扩展$HOME
环境变量来确定主目录。由于缓冲区大约为 256 字节,我们实际上可以通过溢出缓冲区来绕过 if 条件(将 HOME 定义为长度超过 256 字节的字符串),例如:
export HOME=$HOME/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.
Run Code Online (Sandbox Code Playgroud)
临时重新挂载根文件系统读写,并为 .ssh 创建一个符号链接,指向 ssh可以写入的某个地方。通过这种方式,您还可以在将来执行诸如添加 ssh 密钥之类的操作,或者允许新的 known_hosts 使用,而无需进行额外的繁重步骤。 而且你可以摆脱你的-o UserKnownHostsFile
在同一时间选择。
归档时间: |
|
查看次数: |
7281 次 |
最近记录: |