OpenSSH изменяет расположение файлов пользователя в соответствии со спецификацией XDG

OpenSSH изменяет расположение файлов пользователя в соответствии со спецификацией XDG

Можно ли изменить расположение по умолчанию для определенных файлов пользователя 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'

Не для слабонервных... и не рекомендуется.

Но эй, этоможетбудет сделано! ;-)

Связанный контент