是否可以修改 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_hosts
:ssh -o UserKnownHostsFile="$SSH_HOME"/known_hosts
~/.ssh/authorized_keys
:这需要sshd
(服务器)的帮助,将包含的xxx.conf
文件放入其中,作为全局语句或每个用户的块。无论如何,您都必须进行硬编码,因为它无法展开。/etc/ssh/sshd_config.d/xxx.conf
AuthorizedKeysFile ~/.config/ssh/authorized_keys
Match user xxx
~/.config/ssh
XDG_CONFIG_HOME
对于UserKnownHostsFile
和IdentityFile
,您也可以在中设置它们"$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'
不适合胆小的人...也不推荐。
但是,嘿,它能做完了! ;-)