ssh命令为什么不遵循URI上的RFC?


9

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

我认为@MichaelKjörling是正确的。冒号是主机名停止且路径在该主机上开始的边界。您需要使用-p交换机来传送备用端口。
slm

6
那不是RFC,那是自2006
StéphaneChazelas 2013年

我同意rfc3986更适合引用。
Tomasz Wasiluk

Answers:


5

ssh比更通用的URI格式(1998)早几年(1995 IIRC)。


因此,您是说1994年12月发布的RFC 1738草案不会影响OpenSSH的开发吗?OpenSSH的最早出现在OpenBSD的2.6和第一手持释放在1999年10月取得以下维基百科。除非它必须与ssh.com工具兼容?
Tomasz Wasiluk

RFC 1738是用于URL的,在我的记忆中不是那么通用的格式,后来在URI中进行了通用。openssh和ssh相比要晚得多,我不记得已经进行了过渡,因此很有可能它们在很大程度上与命令行兼容。
Anthon

14

我最初将其发布为评论,但会充实一点作为答案。

OpenSSH包含几个实用程序,其中最著名的是sshscp。虽然ssh只会连接到远程计算机(并且可能在该远程计算机上执行命令),但OpenSSH的其他部分(例如,scp语法)略有不同。由于全部都是OpenSSH套件的一部分,因此它们很可能共享许多代码。

使用scp,您可以将三元组形式的远程文件指定为user@host:remotefilename,其中remotefilename可以是相对路径或绝对路径。

如果允许主机部分包含在表单中host:port,则可能会造成歧义:在标准端口上连接时确实jdoe@host.example.com:2222引用~jdoe/2222host.example.com,或者在标准端口上根本不引用文件(或更糟的是~jdoe)通过端口2222连接host.example.com吗?

您提供的URI语法在表达方式上受到了更大的限制(不允许使用文件名规范),更重要的是,除非实际的主机名包含a :(我认为这样),否则永远不会有歧义。甚至可以在DNS中使用,并且肯定不是很普遍,而全数字文件名并不是那么普遍)。

最初开发SSH时,它是作为更安全的直接替代早期RSH / rlogin工具套件而开发的。我不知道它在1990年代初的命令行语法是什么(描述rlogin的RFC1991年12月的RFC 1282,早于您引用的文档大约15年),但这似乎并不合理。猜测它使用了非常相似的语法,因为用户名是在rlogin协议中专门传输的。引用RFC 1282:

建立连接后,客户端将四个以空值结尾的字符串发送到服务器。第一个是空字符串(即,它仅由一个零字节组成),后跟三个非空字符串:客户端用户名,服务器用户名以及终端类型和速度。更明确地说:...

可以通过各种系统工具获取本地用户名,但是必须以某种方式显式指定远程用户名。除了@通常被发音为“ at”之外,因此自然是一个不错的选择,它user@host可以很好地映射到已建立的语法,例如,电子邮件传输(比较的SMTP地址user@host,其中host可能是实际主机或带有MX记录指向的DNS名称(而不是新主机),因此这可能是一个简单的选择。

还应注意 Stephane Chazelas在评论中指出的内容:您所引用的文档不是RFC,它是目前已有七年历史的草案,通过Google的快速搜索来确认,看来该草案从未真正起步。 。这种情况一直在发生;提出了一些建议,但并没有获得将其实际制作为RFC的支持(甚至很多,很多 RFC是非标准的)。


1
我猜我的问题应该是“为什么OpenSSH实用程序不遵循通用URI标准?”。我很感谢您的见解,但没有回答我的问题。
Tomasz Wasiluk

+1历史角度可用于绘制混乱的标准海图
MSW 2013年

为了扩展评论“许多RFC是非标准”,这离事实还远。RFC的本质是“征求意见”。它仅是信息性的。它可以是便笺,备忘录或文档。RFC只是已发布的备忘录;RFC仅仅是标准文档发布的众多方式之一,尽管这并不是RFC的唯一目的。可以通过RFC记录标准,但是RFC并不总是特定标准的文档。香蕉是一种水果,但并非所有水果都是香蕉。
旋转
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.