Почему команда ssh не следует за RFC на URI?

Внутренне, большинство файловых систем хранит байты: драйвер файловой системы не заботится о том, что означают байты. Универсальный драйвер файловой системы на Linux и большинстве других современных нельдов позволяет любой байт кроме / и пустой байт для появления в имени файла.

Существуют файловые системы, которые могут иметь ограничения кодирования — обычно несобственные файловые системы, такие как FAT или NTFS. Некоторые сетевые файловые системы, такие как Samba могут перевести между кодированием сервера и клиентом, кодирующим; необходимо будет удостовериться, что сервер и клиентские конфигурации являются когерентными.

Традиционно, в большинстве систем, байты, которые составляют имя файла, интерпретируются как UTF-8. При запуске приложения, которое интерпретирует имена файлов как символы, например, приложение, которое передает имена по FTP, Вы, возможно, должны настроить это приложение, чтобы сказать ему, что Ваши имена файлов кодируются в UTF-8. Установка среды LC_CTYPE к локали UTF-8 как en_US.UTF-8 добивается цели для многих приложений командной строки.

Если Вы храните файлы в системе, которая не поддерживает UTF-8, это не имеет значения. Байты останутся тем же. Вы не сможете отобразить символы, которые составляют имена файлов, но если Вы скопируете файлы назад в систему, которая поддерживает UTF-8, то те те же байты все еще отобразятся как символы UTF-8.

Если Вы пишете свое собственное приложение, с помощью UTF-8 внутренне и, когда это возможно, для устройства хранения данных, и передача является хорошей идеей.

9
13.05.2013, 17:48
2 ответа

ssh предшествует более общему формату (1998) URI на несколько лет (1995 IIRC).

5
27.01.2020, 20:05
  • 1
    Таким образом, Вы говорите, что проект RFC 1738, опубликованного в декабре 1994, возможно, не влиял на разработку OpenSSH? OpenSSH сначала появился в OpenBSD 2.6, и первый портативный выпуск был сделан в октябре 1999 после Википедии. Если это не должно было быть совместимо с инструментами ssh.com? –  Tomasz Wasiluk 15.05.2013, 19:14
  • 2
    для URL и был в моем воспоминании, не таким образом универсальном формат, и позже сделал вывод в URIs. openssh, намного позже как ssh, я не помню сделавший переход, таким образом, существует хороший шанс, они - командная строка, совместимая в большой степени. –  Anthon 15.05.2013, 19:27

Я первоначально отправил это как комментарий, но буду конкретизировать его немного как ответ.

OpenSSH содержит несколько утилит, среди самых известных из которых ssh и scp. В то время как ssh только соединится с удаленным компьютером (и возможно выполнит команду на том удаленном компьютере), другие части OpenSSH такой как scp имейте немного отличающийся синтаксис. На основании всего являющегося частью комплекта OpenSSH, они, вероятно, совместно используют много кода.

С scp, Вы указываете удаленный файл на форме триплета как user@host:remotefilename, где remotefilename может быть относительный или полный путь.

Если части, относящейся к хосту позволили быть на форме host:port, это создало бы потенциальную неоднозначность: делает jdoe@host.example.com:2222 обратитесь к ~jdoe/2222 на host.example.com при соединении на стандартном порте, или делает он не относится ни к какому файлу вообще (или хуже, ~jdoe) на host.example.com при соединении по порту 2222?

Синтаксис URI, который Вы представляете, более ограничен в том, что он может выразить (он не допускает спецификацию имени файла), и что еще более важно, никогда не может быть неоднозначности, если фактическое имя хоста не включает a : (который я не думаю, даже возможно в DNS и конечно обычно не делается, тогда как все-числовые имена файлов не все это необычное).

Когда SSH был первоначально разработан, он был разработан как более безопасная, общедоступная замена для ранее комплект RSH/rlogin инструментов. Я не знаю то, что синтаксис командной строки для этого вернулся в начале 1990-х (RFC, описывающим rlogin, является RFC 1282 с декабря 1991, предшествуя документу, который Вы цитируете приблизительно на 15 лет), но это не кажется неблагоразумным предположением, что он использовал очень похожий синтаксис, потому что имя пользователя было передано особенно в rlogin протоколе. Заключение в кавычки RFC 1282:

После установления соединения клиент отправляет четыре завершенных пустым указателем строки на сервер. Первой является пустая строка (т.е. она состоит только из единственного нулевого байта), сопровождаемый тремя непустыми строками: клиентское имя пользователя, имя пользователя сервера, и терминальный тип и скорость. Более явно:...

Локальное имя пользователя может быть получено через различные системные средства, но удаленное имя пользователя должно быть указано явно так или иначе. Кроме @ часто будучи объявленным "в" и таким образом будучи довольно естественным выбором для начала, user@host карты хорошо к установленному синтаксису для, например, почтовой передаче (сравнивают адрес SMTP user@host, где host может быть фактический хост или имя DNS с записью MX, указывающей на фактический хост), таким образом, это был, вероятно, легкий выбор вместо того, чтобы составить что-то новое.

Также стоит отметить то, на что Stephane Chazelas указал в комментарии: документом, к которому Вы обращаетесь, не является RFC, это - в настоящее время семилетний проект, который, судя быстрым поиском Google для подтверждения, кажется, никогда не успешно стартовал. Это происходит все время; что-то предложено, но не собирает поддержку для фактического превращения его в RFC (и даже многие, много RFCs являются нестандартами).

14
27.01.2020, 20:05
  • 1
    , я предполагаю свой вопрос, должен был быть, "Почему утилиты OpenSSH не следуют общим стандартам URI?". В то время как я ценю Ваше понимание, оно не отвечало на мой вопрос. –  Tomasz Wasiluk 15.05.2013, 18:58
  • 2
    +1 полезна в построении диаграммы хаотического моря стандартов –  msw 07.07.2013, 01:49
  • 3
    Чтобы подробно остановиться на комментарии, "много RFCs являются нестандартами", это не могло быть далее от истины. Самой природой RFC является "Запрос комментария"; это просто информационно. Это может быть примечание, заметка или документация. RFC является просто опубликованной заметкой; RFCs являются просто также одним из многих способов, которыми публикуется документация стандартов, хотя это не единственная цель RFC. Стандарт может быть зарегистрирован через RFC, но RFC является не всегда документацией для определенного стандарта. Банан является фруктом, но не все фрукты бананы. –  Swivel 10.09.2016, 03:14

Теги

Похожие вопросы