¿Por qué el comando ssh no sigue RFC en URI?

9

El RFC:

presenta el SSH URI como:

ssh://[<user>[;fingerprint=<host-key fingerprint>]@]<host>[:<port>]

¿Hay alguna razón conocida por la cual el comando OpenSSH ssh no sigue este estándar con la opción de nombre de host? No acepta un puerto después de dos puntos.

Ejemplo de un URI que esperaba trabajar:

$ ssh user@host:2222
ssh: Could not resolve hostname host:2222: Name or service not known
Tomasz Wasiluk
fuente
Creo que @ MichaelKjörling es correcto. Los dos puntos son el límite donde se detiene el nombre de host y la ruta comienza en ese host. Debe usar el -pconmutador para transmitir un puerto alternativo.
slm
66
Eso no es un RFC, es un borrador que no se ha seguido desde 2006.
Stéphane Chazelas
Estoy de acuerdo en que rfc3986 hubiera sido más apropiado citar.
Tomasz Wasiluk

Respuestas:

5

sshes anterior al formato URI más general ( 1998 ) por varios años (1995 IIRC).

Anthon
fuente
¿Entonces está diciendo que el borrador del RFC 1738 publicado en diciembre de 1994 no pudo haber influido en el desarrollo de OpenSSH? OpenSSH apareció por primera vez en OpenBSD 2.6 y la primera versión portátil se realizó en octubre de 1999 después de Wikipedia . ¿A menos que tuviera que ser compatible con las herramientas de ssh.com?
Tomasz Wasiluk
RFC 1738 es para URLs y estaba en mi recuerdo un formato no tan genérico y luego generalizado en URI. openssh es mucho más tarde que ssh, no recuerdo haber hecho la transición, por lo que es muy probable que sean compatibles con la línea de comandos en gran medida.
Anthon
14

Originalmente publiqué esto como un comentario, pero lo desarrollaré un poco como respuesta.

OpenSSH contiene varias utilidades, entre las cuales las más notables son sshy scp. Si bien sshsolo se conectará a una computadora remota (y posiblemente ejecutará un comando en esa computadora remota), otras partes de OpenSSH como scptienen una sintaxis ligeramente diferente. En virtud de que todos forman parte de la suite OpenSSH, es probable que estos compartan mucho código.

Con scp, puede especificar un archivo remoto en un formulario de triplete como user@host:remotefilename, donde remotefilenamepuede ser una ruta relativa o absoluta.

Si se permitiera que la parte del host estuviera en el formulariohost:port , esto crearía una posible ambigüedad: se [email protected]:2222refiere a ~jdoe/2222host.example.com cuando se conecta en el puerto estándar, o no se refiere a ningún archivo (o peor ~jdoe) en host.example.com cuando se conecta a través del puerto 2222?

La sintaxis de URI que presenta es más limitada en lo que puede expresar (no permite una especificación de nombre de archivo), y lo que es más importante, nunca puede haber ambigüedad a menos que el nombre de host real incluya un :(que no creo incluso es posible en DNS, y ciertamente no se hace comúnmente, mientras que los nombres de archivos totalmente numéricos no son tan inusuales).

Cuando SSH se desarrolló originalmente , se desarrolló como un reemplazo directo más seguro para el conjunto de herramientas RSH / rlogin anterior. No sé cuál fue la sintaxis de la línea de comandos para eso a principios de la década de 1990 (el RFC que describe rlogin es RFC 1282 de diciembre de 1991 , anterior al documento que cita en unos 15 años), pero no parece irrazonable Supongo que utilizó una sintaxis muy similar porque el nombre de usuario se transmitió especialmente en el protocolo rlogin. Citando RFC 1282:

Al establecer la conexión, el cliente envía cuatro cadenas terminadas en nulo al servidor. La primera es una cadena vacía (es decir, consta únicamente de un solo byte cero), seguida de tres cadenas no nulas: el nombre de usuario del cliente, el nombre de usuario del servidor y el tipo y la velocidad del terminal. Más explícitamente: ...

El nombre de usuario local se puede obtener a través de varias instalaciones del sistema, pero el nombre de usuario remoto debe especificarse explícitamente de alguna manera . Además de que a @menudo se pronuncia "at" y, por lo tanto, es una opción bastante natural para empezar, se user@hostasigna bien a la sintaxis establecida, por ejemplo, para la transmisión de correo electrónico (compare una dirección SMTP de user@host, donde hostpuede ser un host real o un nombre DNS con un registro MX apuntando) para un host real), por lo que probablemente fue una elección fácil en lugar de inventar algo nuevo.

También vale la pena señalar lo que Stephane Chazelas señaló en un comentario : el documento al que hace referencia no es un RFC, es actualmente un borrador de siete años que, a juzgar por una rápida búsqueda en Google para confirmar, parece que nunca se ha despegado . Eso pasa todo el tiempo; se propone algo, pero no obtiene el apoyo para convertirlo en un RFC (e incluso muchos, muchos RFC no son estándares).

un CVn
fuente
1
Supongo que mi pregunta debería haber sido "¿Por qué las utilidades OpenSSH no siguen los estándares generales de URI?". Si bien agradezco su perspicacia, no respondió mi pregunta.
Tomasz Wasiluk
La perspectiva histórica de +1 es útil para trazar el caótico mar de estándares
msw
Para ampliar el comentario "muchos RFC no son estándares", esto no podría estar más lejos de la realidad. La naturaleza misma de un RFC es una "Solicitud de comentarios"; Es meramente informativo. Puede ser una nota, una nota o documentación. Un RFC es simplemente un memo publicado; Los RFC son simplemente también una de las muchas formas en que se publica la documentación estándar, aunque este no es el único propósito de un RFC. Un estándar puede documentarse mediante un RFC, pero un RFC no siempre es documentación para un estándar específico. Un plátano es una fruta, pero no todas las frutas son plátanos.
Giratorio