OpenSSH 修改用户特定文件的位置以符合 XDG 规范

OpenSSH 修改用户特定文件的位置以符合 XDG 规范

是否可以修改 OpenSSH 用户特定文件的默认位置(~/.ssh)?

我发现XDG 基础目录规范我想知道是否有可能使 OpenSSH 与之兼容?

答案1

这是不可能的。

这是在 Bug 2050:支持XDG basedir规范,其状态为“已关闭,将修复”。自 2012 年以下最终答复以来,用户提出的以下要求已不再得到答复:

OpenSSH(及其祖先 ssh-1.x)使用​​ ~/.ssh 已有 17 年的历史。这个位置深深印在无数用户的脑海中,数百万个运行良好的配置和无数的工具。

更改我们配置的位置需要非常强有力的理由,并且遵循桌面应用程序(OpenSSH 不是其中之一)的趋势是不够的。

Arch Linux 在其状态报告中为此添加了另一个原因 XDG 基础目录

假定许多 ssh 守护进程和客户端(例如 DropBear 和 OpenSSH)都存在。

答案2

理论上你可以,因为 OpenSSH 为您提供了一些选项来为 中的部分(也可能是全部)常用文件指定备用路径~/.ssh

但请注意,这是非常非常规,对每个文件都有不同的方法,并且可能需要超级用户权限才能更改 ssh 客户端和服务器的设置。当然不会方便的,并且它可能在许多极端情况下失败。

话虽如此,让我们尝试一下这个有趣的练习:

  • 假设export SSH_HOME=${XDG_CONFIG_HOME:-$HOME/.config}/ssh
  • ~/.ssh/config:可以通过命令行更改ssh -F "$SSH_HOME"/config
  • ~/.ssh/id_{ed25519,rsa}{,.pub}: 也可以是命令行ssh -i "$SSH_HOME"/id_ed25519(或-o IdentityFile="$SSH_HOME"/id_ed25519)。可以多次指定以尝试不同的键。
  • ~/.ssh/known_hostsssh -o UserKnownHostsFile="$SSH_HOME"/known_hosts
  • ~/.ssh/authorized_keys:这需要sshd(服务器)的帮助,将包含的xxx.conf 文件放入其中,作为全局语句或每个用户的块。无论如何,您都必须进行硬编码,因为它无法展开。/etc/ssh/sshd_config.d/xxx.confAuthorizedKeysFile ~/.config/ssh/authorized_keysMatch user xxx~/.config/sshXDG_CONFIG_HOME

对于UserKnownHostsFileIdentityFile,您也可以在中设置它们"$SSH_HOME"/config,或者删除/etc/ssh/ssh_config.d/xxx.conf包含选项的配置覆盖文件,但同样的硬编码限制~/.config/ssh也适用。

总结一下:

sudo tee /etc/ssh/sshd_config.d/00-xdg.conf <<< 'AuthorizedKeysFile ~/.config/ssh/authorized_keys'
export SSH_HOME=${XDG_CONFIG_HOME:-$HOME/.config}/ssh
alias ssh='ssh -F "$SSH_HOME"/config -i "$SSH_HOME"/id_ed25519 -o UserKnownHostsFile="$SSH_HOME"/known_hosts'

不适合胆小的人...也不推荐。

但是,嘿,它做完了! ;-)

相关内容