Вопрос или проблема
Я использую GIO для монтирования SFTP-пути, где имя содержит заглавные буквы. Это, похоже, не удается, и в сообщении об ошибке входящее имя, похоже, было преобразовано в строчные буквы.
Полная команда: gio mount sftp://FOO
, а сообщение об ошибке:
gio: sftp://foo/: Соединение не удалось
Обратите внимание на изменение регистра.
Это ошибка, или я пропустил какой-то стандарт, согласно которому пути должны быть нечувствительны к регистру?
У меня был случай, когда я настроил SSH-сервер в ~/.ssh/config
, и имя Host
содержало заглавные буквы. Я пытался выполнить монтирование SFTP через GNOME Files. Изменение имени, используемого в Host
, на все строчные буквы решило мою проблему.
Если вы хотите попробовать сами, вот минимальная настройка с Docker:
docker run -it --rm ubuntu:24.04 bash
apt-get update
apt-get install dbus ssh gvfs-backends libglib2.0-bin
dbus-run-session bash
gio mount sftp://FOO
Это ошибка, или я пропустил какой-то стандарт, согласно которому пути должны быть нечувствительны к регистру?
Это не путь; это раздел “авторитета” URL – другими словами, поле имени хоста – и имена хостов определены как нечувствительные к регистру в стандартном формате URL (RFC 3986 §3.2.2), исходя из его первоначального определения, специфичного для HTTP (RFC 2616 §3.2.3), поскольку они также нечувствительны к регистру в DNS (RFC 1035 §2.3.3). Реализации не обязаны сохранять регистр.
«Путь» URL (который является чувствительным к регистру) начинается только с косой черты после авторитета (в обоих ваших URL есть /
как путь).
(Большинство других систем именования хостов также нечувствительны к регистру, включая mDNS/Bonjour (RFC 6762 §5 последний абзац) и ARPANET HOSTS.TXT (RFC 810 пункт 1). Хотя имена NetBIOS/WINS технически чувствительны к регистру на уровне протокола (MS-NBTE §2.2.1), они почти универсально принуждаются к верхнему регистру программным обеспечением, использующим NetBIOS.)
Так что я бы утверждал, что это ошибка OpenSSH, если оно сопоставляет раздел Host
с учетом регистра.
Ответ или решение
Согласно вашим наблюдениям, при использовании GIO для монтирования SFTP-пути с заглавными буквами в наименовании, возникает ошибка, связанная с приведением названия к нижнему регистру. Это действительно может вызвать путаницу, поэтому давайте подробно разберемся в данной ситуации.
1. Понимание URL и чувствительность к регистру
В первую очередь, важно а) понимать структуру URL и б) различие между чувствительностью к регистру в разных частях URL. Согласно стандартам URL, в частности RFC 3986:
-
Часть authority — это фрагмент URL, который включает имя хоста. В соответствии со стандартами, имена хостов являются нечувствительными к регистру, что означает, что
FOO
иfoo
будут восприниматься как одно и то же. -
Путь (начиная с первого символа после authority) чувствителен к регистру. Например,
/SomeFolder
и/somefolder
будут восприниматься как разные пути.
Таким образом, ваше подключение к SFTP-серверу через GIO обрабатывает имя хоста как нечувствительное к регистру, что объясняет изменение заглавных букв в адресе.
2. Ошибка с настройкой SSH
Ваша проблема связана с тем, как OpenSSH обрабатывает записи в ~/.ssh/config
. Если у вас в разделе Host
указано имя с заглавными буквами, OpenSSH может интерпретировать это имя регистрозависимо (что считается неправильным) в отличие от стандартов. Таким образом, когда вы заменили Host
на foo
, это решило проблему.
3. Проблема или ошибка?
Вы правы, что это может усложнить работу, так как многие пользователи могут не осознавать, что GIO и OpenSSH ведут себя по-разному. Можно утверждать, что поведение OpenSSH является ошибкой, так как оно противоречит установленным стандартам.
4. Рекомендации
Чтобы избежать подобных проблем в будущем, рекомендуется следующее:
- Используйте исключительно строчные буквы в настройках
~/.ssh/config
для имен хостов. - Внимательно следите за чувствительностью к регистру при работе с путями и хостами.
- Если вы сталкиваетесь с необычным поведением при монтировании, такая информация может стать полезной для отчетов об ошибках в OpenSSH.
Заключение
Ваша ситуация демонстрирует важность понимания стандартов URL и их реализации в различных системах. Обратите внимание, что использование строчных букв в ваших конфигурациях может значительно упростить процесс подключения к SFTP-серверам и снизить вероятность ошибок. Если у вас возникнут дополнительные вопросы или вы столкнетесь с другими техническими проблемами, не стесняйтесь обращаться за помощью.