RFC:
представляет SSH URI как:
ssh://[<user>[;fingerprint=<host-key fingerprint>]@]<host>[:<port>]
Есть ли известные причины, по которым команда OpenSSH ssh не следует этому стандарту с опцией hostname? Он не принимает порт после двоеточия.
Пример URI, который я ожидал сработать:
$ ssh user@host:2222
ssh: Could not resolve hostname host:2222: Name or service not known
-p
коммутатор для передачи альтернативного порта.Ответы:
ssh
предшествует более общему формату URI ( 1998 ) на несколько лет (1995 IIRC).источник
Первоначально я опубликовал это как комментарий, но немного уточню это как ответ.
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 не являются стандартами).
источник