Можно ли изменить расположение по умолчанию для определенных файлов пользователя OpenSSH ( ~/.ssh
)?
Я нашелСпецификация базового каталога XDGи мне было интересно, возможно ли сделать OpenSSH совместимым с ним?
решение1
Это невозможно.
Это было вызвано в Ошибка 2050: Поддержка спецификации XDG basedir, статус которого "ЗАКРЫТО WONTFIX". Следующие запросы пользователей больше не были удовлетворены после следующего окончательного ответа от 2012 года:
OpenSSH (и его предок ssh-1.x) имеют 17-летнюю историю использования ~/.ssh. Это место заложено в бесчисленных мозгах пользователей, миллионах успешно работающих конфигураций и бесчисленных инструментах.
Изменение местоположения нашей конфигурации потребует очень веских оснований, и следование тенденции настольных приложений (к которым 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'
Не для слабонервных... и не рекомендуется.
Но эй, этоможетбудет сделано! ;-)