Первоначально я опубликовал это как комментарий, но немного уточню это как ответ.
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, который вы представляете, более ограничен в том, что он может выражать (он не допускает указание имени файла), и что еще более важно, не может быть неоднозначности, если фактическое имя хоста не содержит :
(что я не думаю, даже возможно в DNS, и, конечно, обычно это не делается, тогда как все числовые имена файлов не так уж и необычны).
Когда SSH был первоначально разработан , он был разработан как более безопасная замена для более раннего набора инструментов RSH / rlogin. Я не знаю, какой синтаксис командной строки для этого был в начале 1990-х годов (RFC, описывающий rlogin - это RFC 1282 от декабря 1991 года , предшествующий документу, который вы цитируете примерно на 15 лет), но он не кажется необоснованным думаю, что он использовал очень похожий синтаксис, потому что имя пользователя было передано специально в протоколе rlogin. Цитата RFC 1282:
После установления соединения клиент отправляет на сервер четыре строки с нулевым символом в конце. Первая - это пустая строка (т.е. она состоит только из одного нулевого байта), за которой следуют три ненулевые строки: имя пользователя клиента, имя пользователя сервера , а также тип и скорость терминала. Более подробно: ...
Локальное имя пользователя может быть получено с помощью различных системных средств, но удаленное имя пользователя должно быть как-то указано явно . Помимо того, что @
часто произносится как «at» и, таким образом, является довольно естественным выбором для начала, он user@host
хорошо сопоставляется с установленным синтаксисом, например, для передачи электронной почты (сравните SMTP-адрес user@host
, где host
может быть реальный хост или имя DNS с указанием записи MX). на настоящий хост), так что это был, вероятно, легкий выбор, а не придумывать что-то новое.
Стоит также отметить, что Стефан Чазелас указал в комментарии : документ, на который вы ссылаетесь, не является RFC, это в настоящее время семилетний проект, который, судя по быстрому поиску в Google, похоже, никогда не сдвигался с мертвой точки. , Это случается все время; что-то предлагается, но не получает поддержки для фактического превращения его в RFC (и даже многие, многие RFC не являются стандартами).
-p
коммутатор для передачи альтернативного порта.